2017-08-28 1 views
0

Bonjour J'essaie de définir le jeu de caractères sur ma colonne en raison du fait que nous avons une base de données avec différents jeux de caractères sur différentes tables. Voici mon code qui échoue.Définition du jeu de caractères sur la colonne mysql

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

Répondre

0

CHARACTER SET doit être appliqué sur la définition de la colonne, et non pas la contrainte FOREIGN KEY.

CHARACTER SET ne s'applique pas INT type de données, que des variantes de CHAR et TEXT et ENUM.

Le (2) ne signifie rien dans INT(2); peut-être que vous devriez utiliser TINYINT UNSIGNED?

Un tableau peut avoir un défaut CHARACTER SET. Ce paramètre s'applique aux colonnes char/text pour lesquelles vous ne définissez pas explicitement le jeu de caractères.

CREATE TABLE x (
    a VARCHAR(9) CHARACTER SET utf8, 
    b VARCHAR(9) CHARACTER SET latin1, 
    c VARCHAR(9) 
) DEFAULT CHARACTER SET big5; 

c sera implicitement big5; a sera explicitement utf8; b sera latin1.

Lorsque JOINing deux tables sur une colonne de char/texte, assurez-vous d'avoir le même CHARACTER SETetCOLLATION déclarés (explicitement ou implicitement). Sinon, la performance risque de souffrir.

+0

J'ai déjà été montré cela avant de ne pas savoir ce que je pensais. Merci d'avoir répondu. – Jed