MariaDB字符集編碼

MariaDB字符集編碼

查看數據庫支持的全部字符集
SHOW CHARACTER SET;
SHOW COLLATION;

一.查看編碼 

Welcome to the MariaDB monitor.  Commands end with ; or \g.mysql

Your MariaDB connection id is 2sql

Server version: 5.5.41-MariaDB MariaDB Server數據庫


Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.編碼


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.spa


MariaDB [(none)]> SHOW VARIABLES LIKE 'character%';命令行

+--------------------------+----------------------------+orm

| Variable_name            | Value                      |server

+--------------------------+----------------------------+ci

| character_set_client     | utf8                       |rem

| 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/share/mysql/charsets/ |

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

8 rows in set (0.00 sec)


MariaDB [(none)]> 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)


默認是latin1,外部訪問數據亂碼的問題就出在這個connection鏈接層上

二.設置編碼
命令行修改
1. SET NAMES 'utf8';
它至關於下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
通常只有在訪問以前執行這個代碼就解決問題了

2. 建立數據庫是指定編碼
CREATE DATABASE database_name CHARACTER SET utf8;

MariaDB [(none)]> CREATE DATABASE foo CHARACTER SET utf8;

Query OK, 1 row affected (0.00 sec)


MariaDB [(none)]> USE foo;

Database changed

MariaDB [foo]> SHOW VARIABLES LIKE 'character%';

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

| 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     | latin1                     |

| character_set_system     | utf8                       |

| character_sets_dir       | /usr/share/mysql/charsets/ |

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

8 rows in set (0.00 sec)


MariaDB [foo]> SHOW VARIABLES LIKE 'collation%';

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

| Variable_name        | Value             |

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

| collation_connection | utf8_general_ci   |

| collation_database   | utf8_general_ci   |

| collation_server     | latin1_swedish_ci |

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

3 rows in set (0.00 sec)

注意:雖然在建庫的時候有指定字符集,但character_set_server 仍然是latin1, 須要修改配置文件/etc/my.cnf

3. 建立表指定編碼
CREATE TABLE `type` (
`id` int(10) unsigned NOT NULL auto_increment,
`flag_deleted` enum('Y','N') character set utf8 NOT NULL default 'N',
`flag_type` int(5) NOT NULL default '0',
`type_name` varchar(50) character set utf8 NOT NULL default '',
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

示例:

CREATE TABLE mytable 

(

columnn1 INT, 

columnn2 VARCHAR(10) 

)DEFAULT CHARACTER SET hebrew COLLATE hebrew_general_ci;


CREATE OR REPLACE TABLE mytable 

(columnn1 INT,

columnn2 VARCHAR(10),

column3 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_ci 

)DEFAULT CHARACTER SET hebrew COLLATE hebrew_general_ci;

 


SELECT * FROM customers ORDER BY lastname, firstname COLLATE latin1_general_cs

還能夠限制某個字段的字符集做爲篩選條件

4. 修改數據庫成utf8

ALTER DATABASE database_name CHARACTER SET utf8;


5. 修改默認用utf8

ALTER TABLE table_name CHARACTER SET utf8;


6. 修改字段用utf8

MariaDB [foo]> DESC hello;

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

| Field | Type     | Null | Key | Default | Extra |

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

| id    | int(10)  | YES  |     | NULL    |       |

| name  | char(50) | YES  |     | NULL    |       |

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

2 rows in set (0.00 sec)


MariaDB [foo]> ALTER TABLE hello MODIFY name char(50) CHARACTER SET utf8;

Query OK, 0 rows affected (0.00 sec)

Records: 0  Duplicates: 0  Warnings: 0


配置文件
Linux下通常是 /etc/my.cnf,Windows下通常在系統目錄下或者在MySQL的安裝目錄下名字叫my.ini

[mysqld]
character_set_server = utf8
lower_case_table_names = 1 //表名不區分大小寫(此與編碼無關)

[mysqld_safe]
character_set_server = utf8

[mysql]
default-character-set = utf8

[mysql.server]
default-character-set = utf8

[client]
default-character-set = utf8


Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 2

Server version: 5.5.41-MariaDB MariaDB Server


Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


MariaDB [(none)]> SHOW VARIABLES LIKE 'collation%';

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

| Variable_name        | Value           |

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

| collation_connection | utf8_general_ci |

| collation_database   | utf8_general_ci |

| collation_server     | utf8_general_ci |

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

3 rows in set (0.00 sec)


MariaDB [(none)]> SHOW VARIABLES LIKE 'character%';

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

| 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       | /usr/share/mysql/charsets/ |

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

8 rows in set (0.00 sec)


注意:新版本的mariadb,如mariadb-10.1的配置些許有些變化
[mysqld]

init_connect = 'SET collation_connection = utf8_general_ci'

init_connect = 'SET NAMES utf8'

character_set_server = utf8

collation_server = utf8_general_ci

[mysqld_safe]

init_connect = 'SET collation_connection = utf8_general_ci'

init_connect = 'SET NAMES utf8'

character_set_server = utf8

collation_server = utf8_general_ci

相關文章
相關標籤/搜索