我们可以在insert语句中设置排序规则吗?

sqserrrh  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(271)

我正在尝试将数据库排序规则设置为介绍人级别。但是当我从表中提取数据时,我看到了不同的字符。

mysql> DROP TABLE IF EXISTS test.tblname;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE TABLE test.tblname (
    ->     colnm VARCHAR(50)
    ->         CHARACTER SET euckr
    ->         COLLATE euckr_bin
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql>
mysql> INSERT INTO test.tblname VALUES (_euckr'가');
Query OK, 1 row affected, 2 warnings (0.00 sec)

mysql> INSERT INTO test.tblname VALUES (_euckr'각');
Query OK, 1 row affected, 2 warnings (0.00 sec)

mysql> INSERT INTO test.tblname VALUES (_euckr'갂');
Query OK, 1 row affected, 2 warnings (0.00 sec)

mysql> INSERT INTO test.tblname VALUES (_euckr'갃');
Query OK, 1 row affected, 2 warnings (0.00 sec)

mysql>
mysql> SELECT * FROM test.tblname;
+-------+
| colnm |
+-------+
| 媛    |
| 媛    |
| 媛    |
| 媛    |
+-------+
4 rows in set (0.00 sec)

mysql>

当我尝试像“insert into test.tblname values('가');" 我看到数据返回正确。

ct3nt3jp

ct3nt3jp1#

介绍人告诉解析器“后面的字符串使用字符集charset\u name”。因此,您告诉解析器您的字符是euc kr,但实际上您可能是在utf8中键入它,因为这是您的客户机的字符集(您可以用以下方法验证: show variables like 'character_set_client'; )
你应该注意这一点:
查询正常,1行受影响,2个警告(0.00秒)
使用 show warnings; 插入后显示警告。你可能有一个说“不正确的字符串值”。

fykwrbwg

fykwrbwg2#

是的,你可以用介绍人,但只有在合适的情况下。

CONVERT(BINARY('갃') USING euckr) --> '媛'
UNHEX(HEX(CONVERT(CONVERT(UNHEX('B0A2') USING euckr) USING utf8))) --> '각'

也就是说,如果你以某种方式进入 B0A2 进入之内

INSERT INTO test.tblname VALUES (_euckr'...');

然后将正确插入。你有一个键盘可以产生这样的2字节euckr码吗?
对于几乎所有的应用程序,使用 utf8mb4 . 使用其他东西(例如 euckr )仅当源字节采用非utf-8编码时。

相关问题