精华内容
下载资源
问答
  • 字符集
    千次阅读
    2021-01-20 01:53:18

    MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令。包括查看 MySQL 数据库服务器字符集、查看 MySQL 数据库字符集,以及数据表和字段的字符集、当前安装的 MySQL 所支持的字符集等。

    一、查看 MySQL 数据库服务器和数据库字符集。

    mysql> show variables like '%char%';

    +--------------------------+-------------------------------------+------

    | Variable_name | Value |......

    +--------------------------+-------------------------------------+------

    | character_set_client | utf8 |...... -- 客户端字符集

    | character_set_connection | utf8 |......

    | character_set_database | utf8 |...... -- 数据库字符集

    | character_set_filesystem | binary |......

    | character_set_results | utf8 |......

    | character_set_server | utf8 |...... -- 服务器字符集

    | character_set_system | utf8 |......

    | character_sets_dir | D:\MySQL Server 5.0\share\charsets\ |......

    +--------------------------+-------------------------------------+------

    二、查看 MySQL 数据表(table) 的字符集。

    mysql> show table status from sqlstudy_db like '%countries%';

    +-----------+--------+---------+------------+------+-----------------+------

    | Name | Engine | Version | Row_format | Rows | Collation |......

    +-----------+--------+---------+------------+------+-----------------+------

    | countries | InnoDB | 10 | Compact | 11 | utf8_general_ci |......

    +-----------+--------+---------+------------+------+-----------------+------

    三、查看 MySQL 数据列(column)的字符集。

    mysql> show full columns from countries;

    +----------------------+-------------+-----------------+--------

    | Field | Type | Collation | .......

    +----------------------+-------------+-----------------+--------

    | countries_id | int(11) | NULL | .......

    | countries_name | varchar(64) | utf8_general_ci | .......

    | countries_iso_code_2 | char(2) | utf8_general_ci | .......

    | countries_iso_code_3 | char(3) | utf8_general_ci | .......

    | address_format_id | int(11) | NULL | .......

    +----------------------+-------------+-----------------+--------

    四、查看当前安装的 MySQL 所支持的字符集。

    mysql> show charset;

    mysql> show char set;

    +----------+-----------------------------+---------------------+--------+

    | Charset | Description | Default collation | Maxlen |

    +----------+-----------------------------+---------------------+--------+

    | big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |

    | dec8 | DEC West European | dec8_swedish_ci | 1 |

    | cp850 | DOS West European | cp850_general_ci | 1 |

    | hp8 | HP West European | hp8_english_ci | 1 |

    | koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |

    | latin1 | cp1252 West European | latin1_swedish_ci | 1 |

    | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |

    | swe7 | 7bit Swedish | swe7_swedish_ci | 1 |

    | ascii | US ASCII | ascii_general_ci | 1 |

    | ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |

    | sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |

    | hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |

    | tis620 | TIS620 Thai | tis620_thai_ci | 1 |

    | euckr | EUC-KR Korean | euckr_korean_ci | 2 |

    | koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |

    | gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |

    | greek | ISO 8859-7 Greek | greek_general_ci | 1 |

    | cp1250 | Windows Central European | cp1250_general_ci | 1 |

    | gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |

    | latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |

    | armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |

    | utf8 | UTF-8 Unicode | utf8_general_ci | 3 |

    | ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |

    | cp866 | DOS Russian | cp866_general_ci | 1 |

    | keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |

    | macce | Mac Central European | macce_general_ci | 1 |

    | macroman | Mac West European | macroman_general_ci | 1 |

    | cp852 | DOS Central European | cp852_general_ci | 1 |

    | latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |

    | cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |

    | cp1256 | Windows Arabic | cp1256_general_ci | 1 |

    | cp1257 | Windows Baltic | cp1257_general_ci | 1 |

    | binary | Binary pseudo charset | binary | 1 |

    | geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |

    | cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |

    | eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |

    +----------+-----------------------------+---------------------+--------+

    以上查看 MySQL 字符集命令,适用于 Windows & Linux。

    四.修改表和字段的字符集

    //修改数据库

    mysql> alter database name character set utf8;

    //修改表

    alter table 表名 convert to character set gbk;

    //修改字段

    alter table 表名 modify column '字段名' varchar(30) character set gbk not null;

    //添加表字段

    alter table 表名 add column '字段名' varchar (20) character set gbk;

    注:执行命令过程中字段名不加引号

    更多相关内容
  • MySQL查看字符集以及修改字符集

    千次阅读 2022-04-15 14:12:03
    MySQL查看字符集以及修改字符集

    MySQL查看字符集以及修改字符集

    一、查看数据库字符集

    1、进入数据库

    [root@localhost ~]# mysql
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 138
    Server version: 5.7.34 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2021, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>  
    
    

    2、查看MySQL字符集

    根据系统的不同(数据库版本也有可能),安装数据库时字符集也可能不同11

    mysql>  show variables like 'character%';
    +--------------------------+--------------------------------------------------------------+
    | Variable_name            | Value                                                        |
    +--------------------------+--------------------------------------------------------------+
    | character_set_client     | utf8                                                         |
    | character_set_connection | utf8                                                         |
    | character_set_database   | latin1                                                       |
    | character_set_filesystem | binary                                                       |
    | character_set_results    | utf8                                                         |
    | character_set_server     | latin1                                                       |
    | character_set_system     | utf8                                                         |
    | character_sets_dir       | /usr/src/mysql-5.7.34-linux-glibc2.12-x86_64/share/charsets/ |
    +--------------------------+--------------------------------------------------------------+
    8 rows in set (0.01 sec)
    
    
    mysql>  show variables like 'collation%';
    +----------------------+-------------------+
    | Variable_name        | Value             |
    +----------------------+-------------------+
    | collation_connection | utf8_general_ci   |
    | collation_database   | latin1_swedish_ci |
    | collation_server     | latin1_swedish_ci |
    +----------------------+-------------------+
    3 rows in set (0.00 sec)
    
    
    

    3、字符集解释

    系统变量:
    – character_set_client:客户端来源数据使用的字符集
    
    – character_set_connection:连接层字符集
    
    – character_set_database:当前选中数据库的默认字符集
    
    – character_set_results:查询结果字符集
    
    – character_set_filesystem:用于没有字符集导入符的文字和数字-字符串转换
    
    – character_set_server:默认的内部操作字符集
    
    – character_set_system:系统元数据(字段名等)字符集
    
    – 还有以collation_开头的同上面对应的变量,用来描述字符序。
    

    查看MYSQL所支持的字符集

    mysql> show charset;
    +----------+---------------------------------+---------------------+--------+
    | Charset  | Description                     | Default collation   | Maxlen |
    +----------+---------------------------------+---------------------+--------+
    | big5     | Big5 Traditional Chinese        | big5_chinese_ci     |      2 |
    | dec8     | DEC West European               | dec8_swedish_ci     |      1 |
    | cp850    | DOS West European               | cp850_general_ci    |      1 |
    | hp8      | HP West European                | hp8_english_ci      |      1 |
    | koi8r    | KOI8-R Relcom Russian           | koi8r_general_ci    |      1 |
    | latin1   | cp1252 West European            | latin1_swedish_ci   |      1 |
    | latin2   | ISO 8859-2 Central European     | latin2_general_ci   |      1 |
    | swe7     | 7bit Swedish                    | swe7_swedish_ci     |      1 |
    | ascii    | US ASCII                        | ascii_general_ci    |      1 |
    | ujis     | EUC-JP Japanese                 | ujis_japanese_ci    |      3 |
    | sjis     | Shift-JIS Japanese              | sjis_japanese_ci    |      2 |
    | hebrew   | ISO 8859-8 Hebrew               | hebrew_general_ci   |      1 |
    | tis620   | TIS620 Thai                     | tis620_thai_ci      |      1 |
    | euckr    | EUC-KR Korean                   | euckr_korean_ci     |      2 |
    | koi8u    | KOI8-U Ukrainian                | koi8u_general_ci    |      1 |
    | gb2312   | GB2312 Simplified Chinese       | gb2312_chinese_ci   |      2 |
    | greek    | ISO 8859-7 Greek                | greek_general_ci    |      1 |
    | cp1250   | Windows Central European        | cp1250_general_ci   |      1 |
    | gbk      | GBK Simplified Chinese          | gbk_chinese_ci      |      2 |
    | latin5   | ISO 8859-9 Turkish              | latin5_turkish_ci   |      1 |
    | armscii8 | ARMSCII-8 Armenian              | armscii8_general_ci |      1 |
    | utf8     | UTF-8 Unicode                   | utf8_general_ci     |      3 |
    | ucs2     | UCS-2 Unicode                   | ucs2_general_ci     |      2 |
    | cp866    | DOS Russian                     | cp866_general_ci    |      1 |
    | keybcs2  | DOS Kamenicky Czech-Slovak      | keybcs2_general_ci  |      1 |
    | macce    | Mac Central European            | macce_general_ci    |      1 |
    | macroman | Mac West European               | macroman_general_ci |      1 |
    | cp852    | DOS Central European            | cp852_general_ci    |      1 |
    | latin7   | ISO 8859-13 Baltic              | latin7_general_ci   |      1 |
    | utf8mb4  | UTF-8 Unicode                   | utf8mb4_general_ci  |      4 |
    | cp1251   | Windows Cyrillic                | cp1251_general_ci   |      1 |
    | utf16    | UTF-16 Unicode                  | utf16_general_ci    |      4 |
    | utf16le  | UTF-16LE Unicode                | utf16le_general_ci  |      4 |
    | cp1256   | Windows Arabic                  | cp1256_general_ci   |      1 |
    | cp1257   | Windows Baltic                  | cp1257_general_ci   |      1 |
    | utf32    | UTF-32 Unicode                  | utf32_general_ci    |      4 |
    | binary   | Binary pseudo charset           | binary              |      1 |
    | geostd8  | GEOSTD8 Georgian                | geostd8_general_ci  |      1 |
    | cp932    | SJIS for Windows Japanese       | cp932_japanese_ci   |      2 |
    | eucjpms  | UJIS for Windows Japanese       | eucjpms_japanese_ci |      3 |
    | gb18030  | China National Standard GB18030 | gb18030_chinese_ci  |      4 |
    +----------+---------------------------------+---------------------+--------+
    41 rows in set (0.00 sec)
    
    

    这两条命令都是一样的

    mysql> show character set;
    +----------+---------------------------------+---------------------+--------+
    | Charset  | Description                     | Default collation   | Maxlen |
    +----------+---------------------------------+---------------------+--------+
    | big5     | Big5 Traditional Chinese        | big5_chinese_ci     |      2 |
    | dec8     | DEC West European               | dec8_swedish_ci     |      1 |
    | cp850    | DOS West European               | cp850_general_ci    |      1 |
    | hp8      | HP West European                | hp8_english_ci      |      1 |
    | koi8r    | KOI8-R Relcom Russian           | koi8r_general_ci    |      1 |
    | latin1   | cp1252 West European            | latin1_swedish_ci   |      1 |
    | latin2   | ISO 8859-2 Central European     | latin2_general_ci   |      1 |
    | swe7     | 7bit Swedish                    | swe7_swedish_ci     |      1 |
    | ascii    | US ASCII                        | ascii_general_ci    |      1 |
    | ujis     | EUC-JP Japanese                 | ujis_japanese_ci    |      3 |
    | sjis     | Shift-JIS Japanese              | sjis_japanese_ci    |      2 |
    | hebrew   | ISO 8859-8 Hebrew               | hebrew_general_ci   |      1 |
    | tis620   | TIS620 Thai                     | tis620_thai_ci      |      1 |
    | euckr    | EUC-KR Korean                   | euckr_korean_ci     |      2 |
    | koi8u    | KOI8-U Ukrainian                | koi8u_general_ci    |      1 |
    | gb2312   | GB2312 Simplified Chinese       | gb2312_chinese_ci   |      2 |
    | greek    | ISO 8859-7 Greek                | greek_general_ci    |      1 |
    | cp1250   | Windows Central European        | cp1250_general_ci   |      1 |
    | gbk      | GBK Simplified Chinese          | gbk_chinese_ci      |      2 |
    | latin5   | ISO 8859-9 Turkish              | latin5_turkish_ci   |      1 |
    | armscii8 | ARMSCII-8 Armenian              | armscii8_general_ci |      1 |
    | utf8     | UTF-8 Unicode                   | utf8_general_ci     |      3 |
    | ucs2     | UCS-2 Unicode                   | ucs2_general_ci     |      2 |
    | cp866    | DOS Russian                     | cp866_general_ci    |      1 |
    | keybcs2  | DOS Kamenicky Czech-Slovak      | keybcs2_general_ci  |      1 |
    | macce    | Mac Central European            | macce_general_ci    |      1 |
    | macroman | Mac West European               | macroman_general_ci |      1 |
    | cp852    | DOS Central European            | cp852_general_ci    |      1 |
    | latin7   | ISO 8859-13 Baltic              | latin7_general_ci   |      1 |
    | utf8mb4  | UTF-8 Unicode                   | utf8mb4_general_ci  |      4 |
    | cp1251   | Windows Cyrillic                | cp1251_general_ci   |      1 |
    | utf16    | UTF-16 Unicode                  | utf16_general_ci    |      4 |
    | utf16le  | UTF-16LE Unicode                | utf16le_general_ci  |      4 |
    | cp1256   | Windows Arabic                  | cp1256_general_ci   |      1 |
    | cp1257   | Windows Baltic                  | cp1257_general_ci   |      1 |
    | utf32    | UTF-32 Unicode                  | utf32_general_ci    |      4 |
    | binary   | Binary pseudo charset           | binary              |      1 |
    | geostd8  | GEOSTD8 Georgian                | geostd8_general_ci  |      1 |
    | cp932    | SJIS for Windows Japanese       | cp932_japanese_ci   |      2 |
    | eucjpms  | UJIS for Windows Japanese       | eucjpms_japanese_ci |      3 |
    | gb18030  | China National Standard GB18030 | gb18030_chinese_ci  |      4 |
    +----------+---------------------------------+---------------------+--------+
    41 rows in set (0.01 sec)
    
    

    4、查看库的字符集

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | ly                 |
    | mysql              |
    | performance_schema |
    | sys                |
    | zabbix             |
    +--------------------+
    6 rows in set (0.00 sec)
    
    mysql> show create database ly\G
    *************************** 1. row ***************************
           Database: ly
    Create Database: CREATE DATABASE `ly` /*!40100 DEFAULT CHARACTER SET latin1 */  #字符集 latin1 
    1 row in set (0.00 sec)
    
    
    
    mysql> show create database mysql\G
    *************************** 1. row ***************************
           Database: mysql
    Create Database: CREATE DATABASE `mysql` /*!40100 DEFAULT CHARACTER SET latin1 */  #字符集 latin1
    1 row in set (0.00 sec)
    
    
    
    mysql> show create database zabbix\G
    *************************** 1. row ***************************
           Database: zabbix
    Create Database: CREATE DATABASE `zabbix` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */ #字符集utf8
    1 row in set (0.00 sec)
    
    
    

    5、查看表的字符集

    mysql> show tables;
    +--------------+
    | Tables_in_ly |
    +--------------+
    | gw           |
    +--------------+
    1 row in set (0.00 sec)
    
    
    mysql> show create  table  gw\G
    *************************** 1. row ***************************
           Table: gw
    Create Table: CREATE TABLE `gw` (
      `id` int(100) DEFAULT NULL,
      `name` varchar(100) CHARACTER SET latin1 DEFAULT NULL,
      `sex` varchar(100) CHARACTER SET latin1 DEFAULT NULL,
      `age` int(100) DEFAULT NULL,
      `stature` int(100) DEFAULT NULL,
      `weight` int(100) DEFAULT NULL,
      `telephone` int(100) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)  #字符集 CHARSET=utf8
    
    

    二、修改MySQL字符集

    1、修改库的字符集

    查看字符集
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | ly                 |
    | mysql              |
    | performance_schema |
    | sys                |
    | zabbix             |
    +--------------------+
    6 rows in set (0.00 sec)
    
    
    mysql> show create database ly\G
    *************************** 1. row ***************************
           Database: ly
    Create Database: CREATE DATABASE `ly` /*!40100 DEFAULT CHARACTER SET latin1 */
    1 row in set (0.01 sec)
    
    
    修改字符集
    # 语法:alter database  database_name default  charset  字符集名称;
    
    mysql> alter database ly default charset utf8;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> show create database ly\G
    *************************** 1. row ***************************
           Database: ly
    Create Database: CREATE DATABASE `ly` /*!40100 DEFAULT CHARACTER SET utf8 */
    1 row in set (0.00 sec)
    
    

    注意:修改库字符集后库里面的表不会随着库的字符集更改而更改(如果在库里创建表时不指定字符集,这个表的字符集会默认是库的字符集)

    2、修改表级字符集

    查看表的字符集(进入到需要修改表的库中)
    mysql> show create table gw\G
    *************************** 1. row ***************************
           Table: gw
    Create Table: CREATE TABLE `gw` (
      `id` int(100) DEFAULT NULL,
      `name` varchar(100) DEFAULT NULL,
      `sex` varchar(100) DEFAULT NULL,
      `age` int(100) DEFAULT NULL,
      `stature` int(100) DEFAULT NULL,
      `weight` int(100) DEFAULT NULL,
      `telephone` int(100) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1    #字符集 CHARSET=latin1 
    1 row in set (0.00 sec)
    
    
    修改表的字符集
    # 语法:alter table  table_name default  charset  字符集名称;
    
    mysql> alter table gw default charset utf8;
    Query OK, 0 rows affected (0.01 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> show create table gw\G
    *************************** 1. row ***************************
           Table: gw
    Create Table: CREATE TABLE `gw` (
      `id` int(100) DEFAULT NULL,
      `name` varchar(100) CHARACTER SET latin1 DEFAULT NULL,
      `sex` varchar(100) CHARACTER SET latin1 DEFAULT NULL,
      `age` int(100) DEFAULT NULL,
      `stature` int(100) DEFAULT NULL,
      `weight` int(100) DEFAULT NULL,
      `telephone` int(100) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8  #表的字符集已修改
    1 row in set (0.00 sec)
    
    

    3、创建库或创建表时指定字符集

    创建库指定字符集

    #语法  create database database_name default charset 字符集;
    
    mysql> create database 中关村 default charset utf8;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | 中关村              |
    | ly                 |
    | mysql              |
    | performance_schema |
    | sys                |
    | ww                 |
    | zabbix             |
    +--------------------+
    9 rows in set (0.00 sec)
    
    mysql> show create database 中关村\G
    *************************** 1. row ***************************
           Database: 中关村
    Create Database: CREATE DATABASE `中关村` /*!40100 DEFAULT CHARACTER SET utf8 */
    1 row in set (0.00 sec)
    
    

    创建表时指定字符集

    mysql>create table 档案( 编号 int(100) DEFAULT NULL, 姓名 varchar(100) DEFAULT NULL,年龄 int(100) DEFAULT NULL) DEFAULT CHARSET utf8;
    Query OK, 1 row affected (0.00 sec)
    
    
    mysql> show create table 档案\G
    *************************** 1. row ***************************
           Table: 档案
    Create Table: CREATE TABLE `档案` (
      `编号` int(100) DEFAULT NULL,
      `姓名` varchar(100) DEFAULT NULL,
      `年龄` int(100) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    
    mysql> desc 档案;
    +--------+--------------+------+-----+---------+-------+
    | Field  | Type         | Null | Key | Default | Extra |
    +--------+--------------+------+-----+---------+-------+
    | 编号   | int(100)     | YES  |     | NULL    |       |
    | 姓名   | varchar(100) | YES  |     | NULL    |       |
    | 年龄   | int(100)     | YES  |     | NULL    |       |
    +--------+--------------+------+-----+---------+-------+
    3 rows in set (0.00 sec)
    
    
    展开全文
  • Oracle数据库字符集的查询

    千次阅读 2021-04-30 09:59:32
    Oracle数据库字符集通俗的讲就是一个字节数据的相关的解释的符号集合,它具有 大小的差异,也有互相包容关系。Oracle是支持国家语言的相关体系结构,它允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,...

    Oracle数据库字符集通俗的讲就是一个字节数据的相关的解释的符号集合,它具有 大小的差异,也有互相包容关系。Oracle是支持国家语言的相关体系结构,它允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,

    排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。

    影响oracle数据库字符集最重要的参数是NLS_LANG参数。它的格式如下:

    NLS_LANG = language_territory.charset

    它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中:

    Language 指定服务器消息的语言,territory

    指定服务器的日期和数字格式,charset指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK。

    从NLS_LANG的组成我们可以看出,真正影响Oracle数据库字符集的其实是第三部分。所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。

    如何查询Oracle的字符集

    很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集,一是Oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做数据导入的时候,需要这三个字符集都一致才能正确导入。

    1、查询Oracle Server端的字符集:

    有很多种方法可以查出oracle

    server端的字符集,比较直观的查询方法是以下这种:

    SQL>select userenv(‘language’) from

    dual; 结果类似如下:AMERICAN _ AMERICA.

    ZHS16GBK。

    2、如何查询dmp文件的字符集:

    用Oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2

    和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的

    内容,如0354,然后用以下SQL查出它对应的字符集:

    SQL> select

    nls_charset_name(to_number('0354','xxxx')) from dual;

    ZHS16GBK

    如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):

    cat exp.dmp od -x head -1 awk '{print $2 $3}' cut -c 3-6 然后用上述SQL也可以得到它对应的字符集。

    3、查询Oracle client端的字符集:

    这个比较简单。在Windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在Dos窗口里面自己设置,比如:

    set nls_lang=AMERICAN_AMERICA.ZHS16GBK

    这样就只影响这个窗口里面的环境变量。 在Unix平台下,就是环境变量NLS_LANG。

    $echo $NLS_LANG

    AMERICAN_AMERICA.ZHS16GBK

    如果检查的结果发现Server端与Client端字符集不一致,请统一修改为同Server端相同的字符集。

    修改Oracle的字符集

    Oracle的字符集有互相的包容关系

    如us7ascii就是zhs16gbk的子集,从us7ascii到zhs16gbk不会有数据解释上的问题,不会有数据丢失。在所有的字符集中utf8应该是最大,因为它基于unicode,双字节保存字符(也因此在存储空间上占用更多)。

    一旦数据库创建后,数据库的字符集理论上讲是不能改变的。因此,在设计和安装之初考 虑使用哪一种字符集十分重要。根据Oracle的官方说明,字符集的转换是从子集到超集受支持,反之不行。如果两种字符集之间根本没有子集和超集的关系,

    那么字符集的转换是不受oracle支持的。对数据库server而言,错误的修改字符集将会导致很多不可测的后果,可能会严重影响数据库的正常运行,所

    以在修改之前一定要确认两种字符集是否存在子集和超集的关系。一般来说,除非万不得已,我们不建议修改oracle数据库server端的字符集。特别说 明,我们最常用的两种字符集ZHS16GBK和ZHS16CGB231280之间不存在子集和超集关系,因此理论上讲这两种字符集之间的相互转换不受支 持。

    修改Server端字符集(不建议使用):

    在Oracle

    8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但Oracle8之后,至少有三张系统表记录了Oracle数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:

    $sqlplus /nolog SQL>conn / as

    sysdba;

    若此时数据库服务器已启动,则先执行SHUTDOWN

    IMMEDIATE命令关闭数据库服务器,然后执行以下命令:

    blog_6e8965110101ioak.html

    修改dmp文件字符集:

    上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第 2第3字节的内容就可以‘骗’过Oracle数据库字符集通俗的讲就是一个字节数据的相关的解释的符号集合,它具有 大小的差异,也有互相包容关系。Oracle是支持国家语言的相关体系结构,它允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,

    排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。

    影响oracle数据库字符集最重要的参数是NLS_LANG参数。它的格式如下:

    NLS_LANG = language_territory.charset

    它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中:

    Language 指定服务器消息的语言,territory

    指定服务器的日期和数字格式,charset指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK。

    从NLS_LANG的组成我们可以看出,真正影响Oracle数据库字符集的其实是第三部分。所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。

    如何查询Oracle的字符集

    很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集,一是Oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做数据导入的时候,需要这三个字符集都一致才能正确导入。

    1、查询Oracle Server端的字符集:

    有很多种方法可以查出oracle

    server端的字符集,比较直观的查询方法是以下这种:

    SQL>select userenv(‘language’) from

    dual; 结果类似如下:AMERICAN _ AMERICA.

    ZHS16GBK。

    2、如何查询dmp文件的字符集:

    用Oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2

    和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的

    内容,如0354,然后用以下SQL查出它对应的字符集:

    SQL> select

    nls_charset_name(to_number('0354','xxxx')) from dual;

    ZHS16GBK

    如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):

    cat exp.dmp od -x head -1 awk '{print $2 $3}' cut -c 3-6 然后用上述SQL也可以得到它对应的字符集。

    3、查询Oracle client端的字符集:

    这个比较简单。在Windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在Dos窗口里面自己设置,比如:

    set nls_lang=AMERICAN_AMERICA.ZHS16GBK

    这样就只影响这个窗口里面的环境变量。 在Unix平台下,就是环境变量NLS_LANG。

    $echo $NLS_LANG

    AMERICAN_AMERICA.ZHS16GBK

    如果检查的结果发现Server端与Client端字符集不一致,请统一修改为同Server端相同的字符集。

    修改Oracle的字符集

    Oracle的字符集有互相的包容关系

    如us7ascii就是zhs16gbk的子集,从us7ascii到zhs16gbk不会有数据解释上的问题,不会有数据丢失。在所有的字符集中utf8应该是最大,因为它基于unicode,双字节保存字符(也因此在存储空间上占用更多)。

    一旦数据库创建后,数据库的字符集理论上讲是不能改变的。因此,在设计和安装之初考 虑使用哪一种字符集十分重要。根据Oracle的官方说明,字符集的转换是从子集到超集受支持,反之不行。如果两种字符集之间根本没有子集和超集的关系,

    那么字符集的转换是不受oracle支持的。对数据库server而言,错误的修改字符集将会导致很多不可测的后果,可能会严重影响数据库的正常运行,所

    以在修改之前一定要确认两种字符集是否存在子集和超集的关系。一般来说,除非万不得已,我们不建议修改oracle数据库server端的字符集。特别说 明,我们最常用的两种字符集ZHS16GBK和ZHS16CGB231280之间不存在子集和超集关系,因此理论上讲这两种字符集之间的相互转换不受支 持。

    修改Server端字符集(不建议使用):

    在Oracle

    8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但Oracle8之后,至少有三张系统表记录了Oracle数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:

    $sqlplus /nolog SQL>conn / as

    sysdba;

    若此时数据库服务器已启动,则先执行SHUTDOWN

    IMMEDIATE命令关闭数据库服务器,然后执行以下命令:

    blog_6e8965110101ioak.html

    修改dmp文件字符集:

    上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第 2第3字节的内容就可以‘骗’过oracle的检查。这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我

    们常用的一些字符集,如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp 文件,所以影响不大。

    具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:

    SQL> select to_char(nls_charset_id('ZHS16GBK'),

    'xxxx') from dual; 0354

    然后将dmp文件的2、3字节修改为0354即可。

    如果dmp文件很大,用ue无法打开,就需要用程序的方法了。网上有人用java存储过程写了转换的程序(用java存储过程的好处是通用性教好,缺点是比较麻烦)。我在Windows下测试通过。但要求Oracle数据库一定要安装JVM选项。

    以上的相关内容就是对Oracle数据库字符集究竟的介绍,望你能有所收获。oracle的检查。这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我

    们常用的一些字符集,如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp 文件,所以影响不大。

    具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:

    SQL> select to_char(nls_charset_id('ZHS16GBK'),

    'xxxx') from dual; 0354

    然后将dmp文件的2、3字节修改为0354即可。

    如果dmp文件很大,用ue无法打开,就需要用程序的方法了。网上有人用java存储过程写了转换的程序(用java存储过程的好处是通用性教好,缺点是比较麻烦)。我在Windows下测试通过。但要求Oracle数据库一定要安装JVM选项。

    展开全文
  • Mysql的字符集编码选择

    千次阅读 2022-04-08 11:54:19
    mysql版本:5.7.37 ...collations:与字符集编码对应的一套规则,这套规则规定了字符如何比较算法,从而解决如何排序的问题,例如大小写敏感比较,按照字符的二进制编码比较等。 collation的名字组成及含义: ...

    mysql版本:5.7.37

    所有内容都来自于mysql5.7文档,这里只是做个笔记,方便以后自己查看。

    mysql中的基础概念:

    character set:字符集编码。

    collations:与字符集编码对应的一套规则,这套规则规定了字符如何比较算法,从而解决如何排序的问题,例如大小写敏感比较,按照字符的二进制编码比较等。

    collation的名字组成及含义:                                                                                                    {character set name}_{language-specific}_{collation_suffixes}                                                 其中第一个部分表示的值字符集的名字;第二部分表示的特定语言,表示按照该特定语言的排序规则排序;第三部分表示的后缀,后缀含义如下表。

    SuffixMeaning
    _aiAccent-insensitive
    _asAccent-sensitive
    _ciCase-insensitive
    _csCase-sensitive
    _binBinary

    另外,collatoin的名字后缀中,_ci暗含了_ai,_cs暗含了_as。例如,latin1_general_ci 表示case-insensitive 和 隐含accent-insensitive。     

    对于_bin后缀的collations来说,其比较的是字符的编码值,这是比较重要的一点。

    collation与character set的关系:

    mysql中,collation的值必须与character set对应,每一种character set都有一个默认的collation。

    例如

    如果指定character set为utf8,那么collation的值就只能是utf8相关的collation,否则报错。

    如果指定了character set为utf8而没有指定collation的值,那么就会使用utf8对应的默认的collation----utf8_general_ci。

    character set repertoire:字符集所支持的字符。

    一个String expression可以指定repertoire属性来表明该String expressions的中包含的字符是属于哪个字符集,该属性是对 Collation Coercibility in Expressions的补充,当 Collation Coercibility in Expressions的优先级相同的时候,就需要查看repertoire属性,然后根据该属性来确定是否能够进行字符串的转换,如果不能就报错;如果能转换,则转换。

    在创建字段的时候,通常系统都会默认分配一个字符集给一个字段,或者用户也可以显式的给字段指定一个字符集,然后当用户在字符串表达式中使用该字段的时候,假如用户没有指定repertoire属性,那么系统就会使用创建字段的时候的字符集的值来确定repertoire的值。repertoire是以下两个值之一:ASCII和UNICODE。

    ASCII:表明该string expressions包含的字符都是ASCII字符。

    UNICODE:表盖string expressions包含的字符是unicode字符。

    之所以是这两个值之一的原因在于:

    ASCII是其它所有character set的子集,所以它能转换为其它任意的字符集字符。

    UNICODE是其它所有character set的超集,所以其它任意字符集字符可以转换为UNICODE字符。

    binary character set:该字符集应该是mysql的一个概念,其有一个对应的binary collation,该collation规定了binary strings(例如,binary,varbinary类型)的比较和排序规则。binary strings类型的字段都是属于binary character set,在创建二进制字段的时候,不需要指定character set也不能指定character set(如果指定会报错)。

    二进制数据

    二进制数据的比较是基于字节的,比对的是字节中内容。例如,一个二进制字段具有5个字节,但是存入的数据只有1个字节,那么剩下4个字节全部自动填0,后续的比较也会把这4个0考虑在内。

    1、查看mysql支持的字符集

    直接在mysql命令行输入以下命令:

    SHOW CHRACTER SET;

    mysql的5.7.37版本支持的字符集高达41种。

    其中第三列直接给出了每种字符集对应的默认的collations。

    2、查看mysql具有的collation

    直接在mysql命令行输入如下命令:

    SHOW COLLATION;

     第二列表明了该collation对应的字符集。

    3、几个重要的系统变量character set variables

    查看系统的character set相关的系统变量:

    SHOW VARIABLES LIKE 'character%';  //查看当前session的系统变量,show的默认范围是session。

    SHOW GLOBAL VARIABLES LIKE 'character%' ; //查看全局的系统变量。

     

    1)、character_set_server

    这是server的字符集编码变量,用来确定当前mysqld使用的字符集编码,默认值:latin1。

    对应的collation的默认值为:-latin1_swedish_ci

    该参数可以通过在mysqld命令行启动的时候指定对应参数来设置:

    --character-set-server=latin1

    --collation-server=latin1_swedish_ci

    或者通过配置文件的方式来设置:

    [mysqld]
    character_set_server=latin1

    collation_server=latin1_swedish_ci

    该参数的作用:

    当CREATE DATABASE创建数据库的时候,如果没有指定CHRACTER SET和COLLATION的话,就以该值作为数据库的character set的值以及collation的值。

    2)、character_set_database

    这是数据库的字符集变量,用来确定当前数据库的字符集编码,该变量的来源:

    首先根据CREATE DATABASE语句创建数据库时指定。

    当指定了character_set_database和collation时,则使用指定的值。

    当只指定了character_set_database时,则使用指定的character_set_database以及对应默认的collation。

    当只指定了collation时,则使用该collation对应的character_set_database和以及该collation。

    如果没有指定任意一个character_set_database和collation时,则使用character_set_server以及collation-server的值。

    当数据库创建完成,该值确定,后续可以通过ALTER语句修改。

    注意:

    全局的character_set_database系统变量在5.7版本中被废弃了,所以这里说得都是具体的数据库的character_set_database。

    当切换数据库的时候,character_set_database的值会自动改变。

    该参数的作用:

    当创建表的时候,如果表没有指定character set和collation,那么就使用数据库的character_set_database的值以及对应的collation的值作为表的选项值。

    当通过LOAD DATA从一个文件中读入数据的时候,如果LOAD DATA没有指定字符集编码,则使用数据库的character_set_database的值来作为文件的字符集编码,使用该编码来解释文件中的内容;如果指定了字符集编码,则使用对应的字符集编码。

    在stored routines(procedures 和 functions)中,如果没有指定字符集编码和collation,则使用数据库character_set_database的值以及对应的collation的值作为该stored foutines的值。如果指定了字符集和collation,则使用指定的值。

    mysql可以在5个层面指定字符集编码:

    server层面,也就是说上面对应的server字符集系统变量。

    database层面,也就是上面所说的database字符集系统变量。

    table层面,在通过CREATE TABLE语句创建表的时候,给表指定字符集编码和collation,如果没有指定,则使用数据库的字符集编码和Collation作为表的字符集编码和collation。

    column层面,在创建表的时候,可以在字段后面指明该字段的字符集编码以及collation,如果没有指定,则使用表的字符集编码和collation作为字段的字符集编码和collation(二进制类型字段除外,因为二进制字段类型只能是二进制字符集以及二进制collation)。

    字符串常量(string literal)层面,使用字符串常量的时候,可以通过[_charset_name]'string' [COLLATE collation_name]中的[_charset_name]和 [COLLATE collation_name]指定字符集编码和collation。如果没有指定,则使用character_set_connection及其对应的collation。

    3)、character_set_connection、character_set_results和character_set_client

    这三个系统变量都是mysql clien跟mysql server交互的重要系统变量:

    character_set_client是mysql client发送过来的语句所使用的字符集编码。

    character_set_connection是mysql client发送过来的语句会转换为该值对应的字符集编码。

    character_set_results是mysql server查询得到的结果所使用的字符集编码。

    这三个系统变量里,只有character_set_connection有对应的collation_connection系统变量。

    交互过程:

    mysql client发送所使用的字符集编码给mysql server,然后mysql server根据发送过来的字符集编码来设置当前session的这三个系统变量值。如果mysql server没有这样一个字符集编码,mysql server就会将当前session中的这三个系统变量的值设置为全局的对应的这三个系统变量的值。

    mysql client一定要通过connector API发送自己所使用的字符集编码给mysql server,否则很容易出现编码不能识别的错误或者出现乱码。

    亦或者,在执行sql语句之前,先执行SET NAMES语句,将这三个系统变量设置为客户端所使用的字符集编码。

    mysql系统connector API,其他程序语言通过该API与mysql server交互,其它程序就相当于mysql client。

    为了保证不出现乱码,或者不出现编码错误,这三个值最好一致,而且在执行sql语句之前,最好同步一下session中的这三个系统变量值。

    注意点:

    mysql server在转换sql语句编码的时候,如果mysql client发送来的sql语句中的字符串常量指定了字符集编码的话,那么它就不会转换这些这些字符串常量的编码,该字符串常量的字符集编码就是它本身的指定值。

    附:

    a8b2f1fb4105fff92d2fed6b7ef60f9f.png
    这三个系统变量的作用示意图-------图片来源于网络

     

    4)、character_set_system和character_set_filesystem以及character_set_dir

    character_set_system是数据库系统使用字符集编码,保存metadata信息的时候,就使用该字符集编码,值永远是utf8。

    character_set_filesystem是数据库系统用来解释文件名时所使用的字符集编码,即把操作系统的文件名转换为此字符集,默认是binary,即不做任何转换。

    character_set_dir是字符集安装目录。

    注意点:

    mysql采用的是C/S架构,每一个mysql client需要通过与mysql server建立连接来访问数据库。mysql server为每一个session初始化一份字符集编码系统变量,我们通过Connector API或者或者SET NAMES或者SET CHARACTER SET命令来修改这些字符集编码的系统变量,实际上修改的是当前session中的那一份字符集编码的系统变量,并不会影响全局的系统变量。

    5)、修改这些系统变量的值

    注意点:系统变量分为全局变量和会话变量

    全局变量:server启动时在全局初始化的一份系统变量。

    会话变量:server与client建立session之后,server会为每个session都初始化一份会话变量。

    临时修改全局变量

    set global var_name = value; //注意:此处的global不能省略。根据手册,set命令设置变量时若不指定GLOBAL、SESSION或者LOCAL,默认使用SESSION

    例如:

    set character_set_server=utf8;

    注意:因为这是一种临时修改方式,所以当server重启之后,所有的修改都将失效。

    永久修改全局变量

    想要永久修改全局变量就必须修改server的配置文件,linux下,mysql的配置文件默认为/etc/mysql/my.cnf。

    该配置文件中的内容是分组的,[group]开头表示为一个组,如果是修改mysql server的配置,则以[mysqld]开头。

    [mysqld]
    
    character_set_server=utf8

    当mysqld重启之后,全局的character_set_server就变为utf8了。

    全局变量的初始化

    当mysqld启动的时候,首先会去读取配置文件中的配置,然后利用配置文件的设置来初始化对应的server的全局系统变量。如果配置文件中没有设置,那么就会使用编译时指定的默认值。

    对于character_set_server来说,其可以在配置文件中配置,当mysqld启动的时候,就从配置文件中读取该配置项,然后设置全局系统变量character_set_server。

    当全局的character_set_server设置好了之后,其它几个全局的系统变量(character_set_database、character_set_client、character_set_connection、character_set_results)都会初始化为与全局的character_set_server同样的值。

    注意点:

    如果没有配置collation_server(必须与character_set_server配合,否则报错。),那么就会将该全局系统变量初始化为character_set_server的字符集编码对应的默认的collation值。其它的两个全局系统变量collation_database、collation_connection会初始化为collation_server的值。

    临时修改session变量

    set var_name=value; //等同于set session var_name=value,set的默认值为session范围,设置当前session的系统变量值。

    例如:

    set character_set_server=utf8;

    另外一个命令

    set names value;//同时设置当前session的character_set_client、character_set_connection、character_set_results的值。

    例如:

    set names utf8;

    相当于

    set character_set_client=utf8;

    set character_set_connection=utf8;

    set character_set_results=utf8;

    session变量无法永久修改,当session结束,相关修改失效。

    session系统变量的初始化

    当mysql client与mysql server建立连接之后,mysql server会为当前session复制一份全局的系统变量作为当前session的初始值。

    在session的过程中,mysql client可以修改对应的系统变量值,session结束,修改消失。

    当重新建立session,mysql server又会重新从全局的系统变量复制一份作为新的session的初始化。

    需要注意的是:character_set_database这个session系统变量,总是随着数据库的切换而改变。

    注意:

    系统变量collation_xxxx总是与相应的的character_set_xxxx对应的,当character_set_xxxx的值改变的时候,collation_xxxx总是随之而变。

    4、指定mysql的字符集编码

    前面提到过,mysql可以在5个层面设置字符集编码,下面根据说明如何设置。

    1)、server层面

    server层面的字符集编码设置有3种方式:

    • server启动之后,修改全局的对应的系统变量。这只是临时性修改不推荐。
    • 在server启动的时候,通过mysqld的命令行参数来设置。每次启动需要重新输入命令行。
    • 在配置文件中设置,每次server启动都会自动去读配置文件中的配置项。

    这里直接给出配置文件的方式,其他两种方式,上面介绍过,可以查看。

    [mysqld]
    
    character_set_server=utf8

    这样配置会将全局的character_set_server变量设置为utf8。

    2)、数据库层面

    创建数据库的时候是可以直接指定数据库的字符集编码的。

    数据库创建好之后,也可以修改数据库的字符集编码。

    CREATE DATABASE db_name
        [[DEFAULT] CHARACTER SET charset_name]
        [[DEFAULT] COLLATE collation_name]
    
    ALTER DATABASE db_name
        [[DEFAULT] CHARACTER SET charset_name]
        [[DEFAULT] COLLATE collation_name]

    例如:

    CREATE DATABASE test_mysql CHARACTER SET utf8mb4;

    数据库编码的计算过程:

    当指定了character set和collation时,则使用指定的值。

    当只指定了character set时,则使用指定的character set以及该字符集编码默认的collation。

    当只指定了collation时,则使用该collation对应的character set和该collation。

    如果没有指定任意一个character set和collation时,则使用character_set_server以及collation-server的值。

    3)、表层面

    创建表的时候可以直接指定表的字符集编码。

    表创建好之后,也可以修改表的字符集编码。

    CREATE TABLE tbl_name (column_list)
        [[DEFAULT] CHARACTER SET charset_name]
        [COLLATE collation_name]]
    
    ALTER TABLE tbl_name
        [[DEFAULT] CHARACTER SET charset_name]
        [COLLATE collation_name]

    例如:

    CREATE TABLE t1 ( c1 char(1)) CHARACTER SET utf8mb4;

    表编码计算过程:

    当指定了character set和collation时,则使用指定的值。

    当只指定了character set时,则使用指定的character set以及该字符集编码默认的collation。

    当只指定了collation时,则使用该collation对应的character set和该collation。

    如果没有指定任意一个character set和collation,则使用数据库的character set和collation。

    4)、字段层面

    创建表的时候可以直接指定字段的字符集编码。

    表创建好之后,也可以修改表的字段的字符集编码。

    col_name {CHAR | VARCHAR | TEXT} (col_length)
        [CHARACTER SET charset_name]
        [COLLATE collation_name]

    例如:

    CREATE TABLE t1 ( col1 VARCHAR(5) CHARACTER SET utf8mb4);

    字段编码计算过程:

    当指定了character set和collation,则使用指定的值。

    当只指定了character set时,则使用指定的character set以及该字符集编码默认的colltion。

    当只指定了collation时,则使用该collation对应的character set和该collation。

    如果没有指定任意一个character set和collation,则使用表的character set和collation。

    5)、字符串常量层面

    可以通过_introducer来指定字符串常量的前缀。

    [_charset_name]'string' [COLLATE collation_name]

    例如:

    SELECT _utf8mb4'abc';

    小结:

    1)、一般来说server层面就使用系统的默认即可,贸然修改这个层面的字符集,可能某些依赖server默认字符集的东西出现问题。

    2)、数据库层面最好在创建数据库的时候就指定字符集编码,将数据库的编码与server层面隔离开。数据库的字符集编码指定之后,就不要再修改数据库的字符集编码了。项目中的某些SQL脚本(例如创建表的SQL脚本)如果依赖于数据库字符集的话,那么修改数据库字符集会导致这些SQL脚本出错。

    3)、表层面字符集编码与数据库保持一致即可。如果某个表中的大部分字段的字符集编码与数据库的字符集编码不一样,那么就重新指定该表的字符集编码与大部分字段字符集编码一致即可。表的字符集编码指定之后,就不要修改了,因为项目中的某些SQL脚本(例如创建表的SQL脚本,某些字段没有指明字符集,默认继承表的字符集编码)如果依赖于表的字符集编码,那么修改表的字符集会导致SQL脚本出错。

    4)、字段层面,除非字段需要使用与表字符集编码不一样的字符集编码,否则与表的字符集编码保持一致。

    5)、collation一般不指定,使用字符集编码默认的collation即可。如果默认不能满足需求,再指定对应的值。

    总结

    1、不要修改server的字符集编码,防止造成意外。

    2、数据库字符集编码应该选择最广泛适用的字符集编码,这里优先选择utf8mb4。

    3、表的字符集编码应该根据表中的绝大多数字段的字符集编码来确定,这样就可以在创建表的时候,少写一点SQL。这是有意义的,试想一下,一张表几十个字段,假如绝大多数字段与表的字符集编码一致,那就可以少写很多东西了。假如有上百张表,工作量将大幅减少。当不知道需要使用什么编码的时候,就选utf8mb4。

    4、字段如果使用的是跟表一样的字符集编码,则直接不用指定字段的character set和collation,继承表的字符集编码和collation即可。如果使用的字符集编码与表的字符集编码不一致,则明确给出字符集编码与collation。

    5、session建立之后,首先修改character_set_client、character_set_connection和character_set_results的值,使它们与数据库的字符集编码保持一致,减少编码转换性能损失。

    6、如果是需要支持unicode,那么数据库字符集编码、表的字符集编码、以及字段的字符集编码就都选择utf8mb4(日常使用,就直接选utf8mb4)。

    utf8:实际上就是utf8mb3,只能表示u+0000到u+ffff的unicode字符。

    utf8mb4:这才是真正意义上的utf8,能表示u+0000到u+10ffff的所有的unicode字符。

    附:

    https://iamzero.blog.csdn.net/article/details/124114206 

    https://iamzero.blog.csdn.net/article/details/124130685

    展开全文
  • Oracle 数据库分为数据库字符集和客户端字符集两种! 很多刚接触的朋友经常会搞混这两个字符集,数据库字符集是在创建数据库时进行指定的,不建议更改!而客户端字符集是可以随时更改的! 查询数据库字符集: select...
  • plsql软件字符集 plsql字符集设置utf8

    千次阅读 2020-12-24 12:19:52
    oracle数据库的服务器端和客户端字符集相同的情况下,EXP针对一个特定的后端数据库使用mod_plsql 模块,你需要手动安装Oacle PLSQL We 工具包(OWA PLSQL packages)在特定的后端数据库上。OWA PLSQL packages应安装在...
  • MySQL字符集详解

    千次阅读 2021-12-25 10:46:15
    今天继续给大家介绍MySQL相关知识,本文主要内容是MySQL字符集。 一、MySQL字符集简介 二、查看和设置MySQL字符集 (一)查看当前字符集设置 (二)更改默认字符集 (三)在创建表时指定字符集 三、更改MySQL字符集
  • 字符集和字符编码1.1 编码和解码1.2 字节和字符1.2 实验环境2. 安装过程2.1 Python 和 Django2.2 PostGIS2.3 psycopg22.4 PROJ.4,GDAL和GEOS2.5 配置环境变量3. 测试GeoDjango3.1 准备3.2 创建新项目3.2 查看地理...
  • MySQL支持多种字符集(character set)提供用户存储数据,同时允许用不同排序规则(collation)做比较。下面基于MySQL5.7介绍一下字符集相关变量的使用。一、字符集、字符序的概念与联系在数据的存储上,MySQL提供了不同...
  • MySQL字符集

    千次阅读 2019-06-30 21:27:10
    mysql字符集基础知识 1.什么叫字符集?常用的字符集的分类? 字符集就是字符和编码的集合,常用的中文字符集是gbk,英文字符集是ASCII 多种字符在一个字符集里,常用的UTF8 2.数据库存取数据与字符集的关系 数据库...
  • 7.Mysql数据库表引擎与字符集

    千次阅读 2021-09-01 12:19:07
    7.Mysql数据库表引擎与字符集 1.服务器处理客户端请求 其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送 一段文本(MySQL语句),服务器进程处理后再向...
  • 字符集与字符编码

    千次阅读 2022-03-21 15:02:10
    先弄懂什么是字符集,什么是字符编码。 区别和联系 字符集是多个字符的集合,可以理解为二进制数,与字符的映射关系,唯一的一个编号就代表一个字。 字符编码是计算机中对字符的表示方式。 字符集与字符编码可以这样...
  • mysql 设置查看字符集

    千次阅读 2021-01-18 18:47:36
    一、查看字符集1.查看MYSQL数据库服务器和数据库字符集方法一:show variables like '%character%';方法二:show variables like 'collation%';2.查看MYSQL所支持的字符集show charset;3.查看库的字符集语法:show ...
  • 修改oracle字符集

    千次阅读 2021-05-01 10:37:53
    如果需要修改字符集,通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换,或通过ALTER DATABASE CHARACTER SET语句修改字符集,但创建数据库后修改字符集是有限制的,只有新的字符集是当前字符集的...
  • Java常用字符集编码详解

    千次阅读 2021-02-26 12:01:02
    Java常用字符集编码详解Web开发的时候经常会遇到一些字符编码的错误,如页面乱码等问题,所以有必要需对字符编码有所了解,以下是Ricki收集的一些资料(可能不是很全,但希望对你有所帮助)Java标准字符集:所谓Java...
  • 一、查看字符集Linux字符集在系统中体现形式是一个环境变量,以CentOS6.5为例,其查看当前终端使用字符集的方式可以有以下四种方式:第一种:[root@Testa-www tmp]# echo $LANGzh_CN.UTF-8第二种:[root@Testa-www ~]#...
  • mysql字符集编码和排序规则

    千次阅读 2021-07-11 12:56:49
    一、说说字符集字符集编码和排序规则 字符集:罗列所有图形字符的一张大表。 比如: GBK字符集(中国制造): 罗列了所有的中文简体、繁体字的一张大表。 Unicode字符集(全世界通用):罗列了世界上所有图形...
  • MySQL字符集是什么

    千次阅读 2021-12-20 17:03:03
    一、什么是字符集 字符集指的是某个范围字符的编码规则 比如utf8字符集对于所有中文汉字采用3个字节来表示(编码),所以我们称utf8为一种字符集。 这里的范围就是指所有的中文汉字 编码规则就是指 都采用3个字节...
  • ORACLE数据库字符集

    万次阅读 多人点赞 2019-08-09 17:47:49
    ORACLE数据库字符集 一.字符集基本知识 二、查询oracle server端的字符集 三.修改oracle的字符集 字符集基本知识 1.基本认知 ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言...
  • Oracle字符集的三大类型

    千次阅读 2021-05-01 05:12:53
    我们都知道Oracle字符集问题,可以分成三类: 即,数据库字符集, sqlplus的字符集(客户端字符集),以及 终端程序的字符集 (非Oracle的),以下的文章就是对Oracle字符集三种类型的主要描述。1、数据库字符集数据库字符...
  • 修改Mysql字符集

    千次阅读 2021-02-02 07:40:55
    第一种一、修改my.ini配置文件(MySQL配置文件)character_set_server = utf8 #设置字符集查看当前数据库字符集show VARIABLES like 'character%';二、修改数据库字符集alter database 数据库名 character set utf8;ps...
  • 如何查看mysql数据库字符集编码

    千次阅读 2021-01-18 20:54:46
    CentOS7下mysql5.6修改默认编码参考原文教程:Centos7下修改mysql5.6编码方式 解决网站中文显示问号解决办法:修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家需要用到的字符,是国际编码。具体操作:1、...
  • vs配置选项“使用多字节字符集”和“使用Unicode字符集”的区别 VS集成开发环境,字符集选择“使用多字节字符集”和“使用Unicode字符集”的直接区别就是:编译器是否增加了宏定义——UNICODE。当选择“使用Unicode...
  • MySQL修改字符集

    千次阅读 2021-03-14 04:12:24
    一、修改字符集1、修改数据库字符集alter database db_new charset utf8mb4;2、修改表字符集alter table tb charset=utf8mb4;3、修改表字符集和校验规则alter table tb charset=utf8mb4 collate=utf8mb4_general_ci;...
  • ORACLE系统字符集设置

    千次阅读 2021-05-06 08:44:46
    修改Oracle客户端字符集方法:1:可以通过修改注册表键值永久设置,类似于这样的键值:HKEY_LOCAL_MACHINE/SOFTWARE/Oracle/HOME0下,如一般的简体中文nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16G...
  • 如何修改mysql字符集

    千次阅读 2021-02-11 23:09:46
    、安装完的MySQL的默认字符集为 latin1 ,为了要将其字符集改为用户所需要的(比如utf8),就必须改其相关的配置文件;由于linux下MySQL的默认安装目录分布在不同的文件下;不像windows一样放在同一目录下,只需修改...
  • oracle字符集如何查询

    万次阅读 2021-05-01 07:26:19
    oracle字符集如何查询这个问题困扰这大家吧,究竟应该怎么解决呢?接下来就跟着小编来看看查看oracle字符集方法,有需要的千万不要错过呦。方法/步骤分享:一、在安装有PLSQL的电脑上点击桌面开始菜单中的PLSQL ...
  • 关于Linux字符集的查看及修改

    千次阅读 2021-05-10 07:56:02
    一·查看字符集字符集在系统中体现形式是一个环境变量,其查看当前终端使用字符集的方式可以有以下几种方式:1、[root@ ~]# echo $LANGen_US.UTF-82、[root@ ~]# env |grep LANGLANG=en_US.UTF-83、[root@david ~]# ...
  • C++与字符集、字符编码

    千次阅读 2019-11-02 10:50:06
    字符集 字符编码 字符集与字符编码的关系 多种字符编码存在的意义 字符编码的发展历史 活动代码页 c++的多字节字符与宽字节字符 c++的多字节字符串与宽字节字符串 C++程序输出字符串的编码 字符串常量 ...
  • ORACLE修改字符集

    千次阅读 2022-04-25 13:58:09
    4、修改字符集 SQL> ALTER DATABASE CHARACTER SET ZHS16GBK; ALTER DATABASE CHARACTER SET ZHS16GBK * ERROR at line 1: ORA-12712: new character set must be a superset of old character set SQL> ALTER ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,133,159
精华内容 453,263
关键字:

字符集