首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改SELECT语句中的动态编码?

如何更改SELECT语句中的动态编码?
EN

Stack Overflow用户
提问于 2021-09-26 18:21:58
回答 1查看 603关注 0票数 1

我有一个列的表,它有cp1251_general_ci排序规则。我不想更改列排序规则,但我想用utf8编码获取数据。

是否有一种方法可以以某种方式选择任何数据,使其看起来就像具有utf8_general_ci排序规则的数据?

我需要这样的东西

代码语言:javascript
复制
SELECT CONVERT_TO_UTF8(weirdColumn) FROM weirdTable
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-26 18:37:33

下面是一个使用cp1251编码的演示表。我会在里面插入一些西里尔字母。

代码语言:javascript
复制
mysql> CREATE TABLE weirdTable (weirdColumn text) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

mysql> insert into weirdTable values ('ЂЃЉЌ');

mysql> select * from weirdTable;
+-------------+
| weirdColumn |
+-------------+
| ЂЃЉЌ        |
+-------------+

使用MySQL的转换()函数强制字符进行不同的编码:

代码语言:javascript
复制
mysql> select convert(weirdColumn using utf8) as weirdColumnUtf8 from weirdTable;
+-----------------+
| weirdColumnUtf8 |
+-----------------+
| ЂЃЉЌ            |
+-----------------+

以下是将结果转换为utf8的证明。我使用查询结果中的元数据创建了一个表:

代码语言:javascript
复制
mysql> create table w2 
    as select convert(weirdColumn using utf8) as weirdColumnUtf8 from weirdTable;
Query OK, 1 row affected (0.07 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> show create table w2\G
*************************** 1. row ***************************
       Table: w2
Create Table: CREATE TABLE `w2` (
  `weirdColumnUtf8` longtext CHARACTER SET utf8
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)

mysql> select * from w2;
+-----------------+
| weirdColumnUtf8 |
+-----------------+
| ЂЃЉЌ            |
+-----------------+

在我的MySQL实例中,utf8mb4是默认的字符编码。没关系,它是utf8的超集,utf8编码足以存储这些字符。但是,我通常建议如果使用utf8,就没有理由不使用utf8mb4。

如果更改字符编码,则无法保留cp1251排序规则。排序规则是特定于编码的。但您可以使用与utf8或utf8mb4关联的排序规则之一。您可以看到给定字符编码的可用排序规则:

代码语言:javascript
复制
mysql> SHOW COLLATION WHERE Charset = 'utf8';
+--------------------------+---------+-----+---------+----------+---------+---------------+
| Collation                | Charset | Id  | Default | Compiled | Sortlen | Pad_attribute |
+--------------------------+---------+-----+---------+----------+---------+---------------+
...
| utf8_general_ci          | utf8    |  33 | Yes     | Yes      |       1 | PAD SPACE     |
| utf8_general_mysql500_ci | utf8    | 223 |         | Yes      |       1 | PAD SPACE     |
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69337748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档