您好,由于我们的数据库在不同的表上具有不同的字符集,因此我试图在列上设置字符集。这是我的代码失败。

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数据类型,仅适用于CHARTEXTENUM的变体。

(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 SETCOLLATION。否则,性能可能会受到影响。

关于mysql - 在mysql列上设置字符集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45924071/

10-14 13:49
查看更多