在mysql列上设置Charset

时间:2017-08-28 17:04:03

标签: mysql character-encoding

您好我正在尝试在我的列上设置字符集,因为我们在不同的表上有一个包含不同字符集的数据库。这是我失败的代码。

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
 );

1 个答案:

答案 0 :(得分:0)

CHARACTER SET应该应用于列定义,而不是FOREIGN KEY约束。

CHARACTER SET不适用于INT数据类型,仅适用于CHARTEXT以及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 (明示或暗示)。否则,性能可能会受到影响。