Укажите character_set_client как набор символов по умолчанию для таблицы в MySQL - PullRequest
0 голосов
/ 18 января 2019

У меня есть следующий запрос для создания таблицы:

  CREATE TABLE qrtz_simprop_triggers
            (          
            SCHED_NAME VARCHAR(120) NOT NULL,
            TRIGGER_NAME VARCHAR(200) NOT NULL,
            TRIGGER_GROUP VARCHAR(200) NOT NULL,
            STR_PROP_1 VARCHAR(512) NULL,
            STR_PROP_2 VARCHAR(512) NULL,
            STR_PROP_3 VARCHAR(512) NULL,
            INT_PROP_1 INT NULL,
            INT_PROP_2 INT NULL,
            LONG_PROP_1 BIGINT NULL,
            LONG_PROP_2 BIGINT NULL,
            DEC_PROP_1 NUMERIC(13,4) NULL,
            DEC_PROP_2 NUMERIC(13,4) NULL,
            BOOL_PROP_1 BOOL NULL,
            BOOL_PROP_2 BOOL NULL,
            PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) ENGINE=InnoDB 
default charset=<value of character_set_client>;

То есть, если значение character_set_client равно UTF8, то кодировка по умолчанию должна быть utf8, а если character_set_client - latin1, то кодировка по умолчанию должна быть latin1.

Это очень важно для меня, и я не могу взломать его даже после нескольких часов. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 18 января 2019

Вы должны сделать это с динамическим SQL. Вы не можете использовать переменные непосредственно в операторе CREATE TABLE.

SET @sql = CONCAT('CREATE TABLE ... DEFAULT CHARSET=', @@character_set_client);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Однако мне интересно, почему вы это делаете. Я бы обычно позволял таблице charset по умолчанию использовать charset для схемы. Кажется странным использовать клиентскую кодировку.

...