您好,由于我们的数据库在不同的表上具有不同的字符集,因此我试图在列上设置字符集。这是我的代码失败。
CREATE TABLE `ax_np_rain_accounts`(
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`service_id` INT(11) NOT NULL,
`type_id` INT(2) UNSIGNED NOT NULL,
`date_created` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`is_processed` TINYINT(1),
PRIMARY KEY (`id`),
INDEX (`service_id`),
INDEX (`date_created`),
FOREIGN KEY (`service_id`) REFERENCES `ax_services`(`ServiceId`) CHARACTER
SET latin1 COLLATE latin1_swedish_ci,
FOREIGN KEY (`type_id`) REFERENCES `ax_np_transaction_types`(`id`) CHARACTER
SET utf8 COLLATE utf8_general_ci
);
最佳答案
CHARACTER SET
应该应用于列定义,而不是FOREIGN KEY
约束。CHARACTER SET
不适用于INT
数据类型,仅适用于CHAR
和TEXT
和ENUM
的变体。(2)
在INT(2)
中什么也没有。也许您应该使用TINYINT UNSIGNED
?
一个表可以具有默认的CHARACTER SET
。此设置适用于您未显式设置字符集的任何字符/文本列。
CREATE TABLE x (
a VARCHAR(9) CHARACTER SET utf8,
b VARCHAR(9) CHARACTER SET latin1,
c VARCHAR(9)
) DEFAULT CHARACTER SET big5;
c
将隐式为big5
; a将显式地utf8
; b
将是latin1
。当在char / text列上使用
JOINing
两个表时,请确保声明(显式或隐式)相同的CHARACTER SET
和COLLATION
。否则,性能可能会受到影响。关于mysql - 在mysql列上设置字符集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45924071/