国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

?? ??? ??
目錄 前言 1. 一般信息 1.1. 關(guān)于本手冊 1.2. 本手冊采用的慣例 1.3. MySQL AB概述 1.4. MySQL數(shù)據(jù)庫管理系統(tǒng)概述 1.4.1. MySQL的歷史 1.4.2. MySQL的的主要特性 1.4.3. MySQL穩(wěn)定性 1.4.4. MySQL表最大能達到多少 1.4.5. 2000年兼容性 1.5. MaxDB數(shù)據(jù)庫管理系統(tǒng)概述 1.5.1. 什么是MaxDB? 1.5.2. MaxDB的歷史 1.5.3. MaxDB的特性 1.5.4. 許可和支持 1.5.5. MaxDB和MySQL之間的特性差異 1.5.6. MaxDB和MySQL之間的協(xié)同性 1.5.7. 與MaxDB有關(guān)的鏈接 1.6. MySQL發(fā)展大事記 1.6.1. MySQL 5.1的新特性 1.7. MySQL信息源 1.7.1. MySQL郵件列表 1.7.2. IRC(在線聊天系統(tǒng))上的MySQL社區(qū)支持 1.7.3. MySQL論壇上的MySQL社區(qū)支持 1.8. MySQL標準的兼容性 1.8.1. MySQL遵從的標準是什么 1.8.2. 選擇SQL模式 1.8.3. 在ANSI模式下運行MySQL 1.8.4. MySQL對標準SQL的擴展 1.8.5. MySQL與標準SQL的差別 1.8.6. MySQL處理約束的方式 2. 安裝MySQL 2.1. 一般安裝問題 2.1.1. MySQL支持的操作系統(tǒng) 2.1.2. 選擇要安裝的MySQL分發(fā)版 2.1.3. 怎樣獲得MySQL 2.1.4. 通過MD5校驗和或GnuPG驗證軟件包的完整性 2.1.5. 安裝布局 2.2. 使用二進制分發(fā)版的標準MySQL安裝 2.3. 在Windows上安裝MySQL 2.3.1. Windows系統(tǒng)要求 2.3.2. 選擇安裝軟件包 2.3.3. 用自動安裝器安裝MySQL 2.3.4. 使用MySQL安裝向?qū)?/a> 2.3.5. 使用配置向?qū)?/a> 2.3.6. 通過非安裝Zip文件安裝MySQL 2.3.7. 提取安裝檔案文件 2.3.8. 創(chuàng)建選項文件 2.3.9. 選擇MySQL服務(wù)器類型 2.3.10. 首次啟動服務(wù)器 2.3.11. 從Windows命令行啟動MySQL 2.3.12. 以Windows服務(wù)方式啟動MySQL 2.3.13. 測試MySQL安裝 2.3.14. 在Windows環(huán)境下對MySQL安裝的故障診斷與排除 2.3.15. 在Windows下升級MySQL 2.3.16. Windows版MySQL同Unix版MySQL對比 2.4. 在Linux下安裝MySQL 2.5.在Mac OS X中安裝MySQL 2.6. 在NetWare中安裝MySQL 2.7. 在其它類Unix系統(tǒng)中安裝MySQL 2.8. 使用源碼分發(fā)版安裝MySQL 2.8.1. 源碼安裝概述 2.8.2. 典型配置選項 2.8.3. 從開發(fā)源碼樹安裝 2.8.4. 處理MySQL編譯問題 2.8.5. MIT-pthreads注意事項 2.8.6. 在Windows下從源碼安裝MySQL 2.8.7. 在Windows下編譯MySQL客戶端 2.9. 安裝后的設(shè)置和測試 2.9.1. Windows下安裝后的過程 2.9.2. Unix下安裝后的過程 2.9.3. 使初始MySQL賬戶安全 2.10. 升級MySQL 2.10.1. 從5.0版升級 2.10.2. 升級授權(quán)表 2.10.3. 將MySQL數(shù)據(jù)庫拷貝到另一臺機器 2.11. 降級MySQL 2.12. 具體操作系統(tǒng)相關(guān)的注意事項 2.12.1. Linux注意事項 2.12.2. Mac OS X注意事項 2.12.3. Solaris注意事項 2.12.4. BSD注意事項 2.12.5. 其它Unix注意事項 2.12.6. OS/2注意事項 2.13. Perl安裝注意事項 2.13.1. 在Unix中安裝Perl 2.13.2. 在Windows下安裝ActiveState Perl 2.13.3. 使用Perl DBI/DBD接口的問題 3. 教程 3.1. 連接與斷開服務(wù)器 3.2. 輸入查詢 3.3. 創(chuàng)建并使用數(shù)據(jù)庫 3.3.1. 創(chuàng)建并選擇數(shù)據(jù)庫 3.3.2. 創(chuàng)建表 3.3.3. 將數(shù)據(jù)裝入表中 3.3.4. 從表檢索信息 3.4. 獲得數(shù)據(jù)庫和表的信息 NoName 3.6. 常用查詢的例子 3.6.1. 列的最大值 3.6.2. 擁有某個列的最大值的行 3.6.3. 列的最大值:按組 3.6.4. 擁有某個字段的組間最大值的行 3.6.5. 使用用戶變量 3.6.6. 使用外鍵 3.6.7. 根據(jù)兩個鍵搜索 3.6.8. 根據(jù)天計算訪問量 3.6.9. 使用AUTO_INCREMENT 3.7. 孿生項目的查詢 3.7.1. 查找所有未分發(fā)的孿生項 3.7.2. 顯示孿生對狀態(tài)的表 3.8. 與Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 調(diào)用MySQL程序 4.3. 指定程序選項 4.3.1. 在命令行上使用選項 4.3.2. 使用選項文件 4.3.3. 用環(huán)境變量指定選項 4.3.4. 使用選項設(shè)置程序變量 5. 數(shù)據(jù)庫管理 5.1. MySQL服務(wù)器和服務(wù)器啟動腳本 5.1.1. 服務(wù)器端腳本和實用工具概述 5.1.2. mysqld-max擴展MySQL服務(wù)器 5.1.3. mysqld_safe:MySQL服務(wù)器啟動腳本 5.1.4. mysql.server:MySQL服務(wù)器啟動腳本 5.1.5. mysqld_multi:管理多個MySQL服務(wù)器的程序 5.2. mysqlmanager:MySQL實例管理器 5.2.1. 用MySQL實例管理器啟動MySQL服務(wù)器 5.2.2. 連接到MySQL實例管理器并創(chuàng)建用戶賬戶 5.2.3. MySQL實例管理器命令行選項 5.2.4. MySQL實例管理器配置文件 5.2.5. MySQL實例管理器識別的命令 5.3. mysqld:MySQL服務(wù)器 5.3.1. mysqld命令行選項 5.3.2. SQL服務(wù)器模式 5.3.3. 服務(wù)器系統(tǒng)變量 5.3.4. 服務(wù)器狀態(tài)變量 5.4. mysql_fix_privilege_tables:升級MySQL系統(tǒng)表 5.5. MySQL服務(wù)器關(guān)機進程 5.6. 一般安全問題 5.6.1. 通用安全指南 5.6.2. 使MySQL在攻擊者面前保持安全 5.6.3. Mysqld安全相關(guān)啟動選項 5.6.4. LOAD DATA LOCAL安全問題 5.7. MySQL訪問權(quán)限系統(tǒng) 5.7.1. 權(quán)限系統(tǒng)的作用 5.7.2. 權(quán)限系統(tǒng)工作原理 5.7.3. MySQL提供的權(quán)限 5.7.4. 與MySQL服務(wù)器連接 5.7.5. 訪問控制 5.7.6. 訪問控制 5.7.7. 權(quán)限更改何時生效 5.7.8. 拒絕訪問錯誤的原因 5.7.9. MySQL 4.1中的密碼哈希處理 5.8. MySQL用戶賬戶管理 5.8.1. MySQL用戶名和密碼 5.8.2. 向MySQL增加新用戶賬戶 5.8.3. 從MySQL刪除用戶賬戶 5.8.4. 限制賬戶資源 5.8.5. 設(shè)置賬戶密碼 5.8.6. 使你的密碼安全 5.8.7. 使用安全連接 5.9. 備份與恢復(fù) 5.9.1. 數(shù)據(jù)庫備份 5.9.2. 示例用備份與恢復(fù)策略 5.9.3. 自動恢復(fù) 5.9.4. 表維護和崩潰恢復(fù) 5.9.5. myisamchk:MyISAM表維護實用工具 5.9.6. 建立表維護計劃 5.9.7. 獲取關(guān)于表的信息 5.10. MySQL本地化和國際應(yīng)用 5.10.1. 數(shù)據(jù)和排序用字符集 5.10.2. 設(shè)置錯誤消息語言 5.10.3. 添加新的字符集 5.10.4. 字符定義數(shù)組 5.10.5. 字符串比較支持 5.10.6. 多字節(jié)字符支持 5.10.7. 字符集問題 5.10.8. MySQL服務(wù)器時區(qū)支持 5.11. MySQL日志文件 5.11.1. 錯誤日志 5.11.2. 通用查詢?nèi)罩?/a> 5.11.3. 二進制日志 5.11.4. 慢速查詢?nèi)罩?/a> 5.11.5. 日志文件維護 5.12. 在同一臺機器上運行多個MySQL服務(wù)器 5.12.1. 在Windows下運行多個服務(wù)器 5.12.2. 在Unix中運行多個服務(wù)器 5.12.3. 在多服務(wù)器環(huán)境中使用客戶端程序 5.13. MySQL查詢高速緩沖 5.13.1. 查詢高速緩沖如何工作 5.13.2. 查詢高速緩沖SELECT選項 5.13.3. 查詢高速緩沖配置 5.13.4. 查詢高速緩沖狀態(tài)和維護 6. MySQL中的復(fù)制 6.1. 復(fù)制介紹 6.2. 復(fù)制實施概述 6.3. 復(fù)制實施細節(jié) 6.3.1. 復(fù)制主線程狀態(tài) 6.3.2. 復(fù)制從I/O線程狀態(tài) 6.3.3. 復(fù)制從SQL線程狀態(tài) 6.3.4. 復(fù)制傳遞和狀態(tài)文件 6.4. 如何設(shè)置復(fù)制 6.5. 不同MySQL版本之間的復(fù)制兼容性 6.6. 升級復(fù)制設(shè)置 6.6.1. 將復(fù)制升級到5.0版 6.7. 復(fù)制特性和已知問題 6.8. 復(fù)制啟動選項 6.9. 復(fù)制FAQ 6.10. 復(fù)制故障診斷與排除 6.11. 通報復(fù)制缺陷 6.12. 多服務(wù)器復(fù)制中的Auto-Increment 7. 優(yōu)化 7.1. 優(yōu)化概述 7.1.1. MySQL設(shè)計局限與折衷 7.1.2. 為可移植性設(shè)計應(yīng)用程序 7.1.3. 我們已將MySQL用在何處? 7.1.4. MySQL基準套件 7.1.5. 使用自己的基準 7.2. 優(yōu)化SELECT語句和其它查詢 7.2.1. EXPLAIN語法(獲取SELECT相關(guān)信息) 7.2.2. 估計查詢性能 7.2.3. SELECT查詢的速度 7.2.4. MySQL怎樣優(yōu)化WHERE子句 7.2.5. 范圍優(yōu)化 7.2.6. 索引合并優(yōu)化 7.2.7. MySQL如何優(yōu)化IS NULL 7.2.8. MySQL如何優(yōu)化DISTINCT 7.2.9. MySQL如何優(yōu)化LEFT JOIN和RIGHT JOIN 7.2.10. MySQL如何優(yōu)化嵌套Join 7.2.11. MySQL如何簡化外部聯(lián)合 7.2.12. MySQL如何優(yōu)化ORDER BY 7.2.13. MySQL如何優(yōu)化GROUP BY 7.2.14. MySQL如何優(yōu)化LIMIT 7.2.15. 如何避免表掃描 7.2.16. INSERT語句的速度 7.2.17. UPDATE語句的速度 7.2.18. DELETE語句的速度 7.2.19. 其它優(yōu)化技巧 7.3. 鎖定事宜 7.3.1. 鎖定方法 7.3.2. 表鎖定事宜 7.4. 優(yōu)化數(shù)據(jù)庫結(jié)構(gòu) 7.4.1. 設(shè)計選擇 7.4.2. 使你的數(shù)據(jù)盡可能小 7.4.3. 列索引 7.4.4. 多列索引 7.4.5. MySQL如何使用索引 7.4.6. MyISAM鍵高速緩沖 7.4.7. MyISAM索引統(tǒng)計集合 7.4.8. MySQL如何計算打開的表 7.4.9. MySQL如何打開和關(guān)閉表 7.4.10. 在同一個數(shù)據(jù)庫中創(chuàng)建多個表的缺陷 7.5. 優(yōu)化MySQL服務(wù)器 7.5.1. 系統(tǒng)因素和啟動參數(shù)的調(diào)節(jié) 7.5.2. 調(diào)節(jié)服務(wù)器參數(shù) 7.5.3. 控制查詢優(yōu)化器的性能 7.5.4. 編譯和鏈接怎樣影響MySQL的速度 7.5.5. MySQL如何使用內(nèi)存 7.5.6. MySQL如何使用DNS 7.6. 磁盤事宜 7.6.1. 使用符號鏈接 8. 客戶端和實用工具程序 8.1. 客戶端腳本和實用工具概述 8.2. myisampack:生成壓縮、只讀MyISAM表 8.3. mysql:MySQL命令行工具 8.3.1. 選項 8.3.2. mysql命令 8.3.3. 怎樣從文本文件執(zhí)行SQL語句 8.3.4. mysql技巧 8.4. mysqlaccess:用于檢查訪問權(quán)限的客戶端 8.5. mysqladmin:用于管理MySQL服務(wù)器的客戶端 8.6. mysqlbinlog:用于處理二進制日志文件的實用工具 8.7. mysqlcheck:表維護和維修程序 8.8. mysqldump:數(shù)據(jù)庫備份程序 8.9. mysqlhotcopy:數(shù)據(jù)庫備份程序 8.10. mysqlimport:數(shù)據(jù)導(dǎo)入程序 8.11. mysqlshow-顯示數(shù)據(jù)庫、表和列信息 8.12. myisamlog:顯示MyISAM日志文件內(nèi)容 8.13. perror:解釋錯誤代碼 8.14. replace:字符串替換實用工具 8.15. mysql_zap:殺死符合某一模式的進程 9. 語言結(jié)構(gòu) 9.1. 文字值 9.1.1. 字符串 9.1.2. 數(shù)值 9.1.3. 十六進制值 9.1.4. 布爾值 9.1.5. 位字段值 9.1.6. NULL值 9.2. 數(shù)據(jù)庫、表、索引、列和別名 9.2.1. 識別符限制條件 9.2.2. 識別符大小寫敏感性 9.3. 用戶變量 9.4. 系統(tǒng)變量 9.4.1. 結(jié)構(gòu)式系統(tǒng)變量 9.5. 注釋語法 9.6. MySQL中保留字的處理 10. 字符集支持 10.1. 常規(guī)字符集和校對 10.2. MySQL中的字符集和校對 10.3. 確定默認字符集和校對 10.3.1. 服務(wù)器字符集和校對 10.3.2. 數(shù)據(jù)庫字符集和校對 10.3.3. 表字符集和校對 10.3.4. 列字符集和校對 10.3.5. 字符集和校對分配示例 10.3.6. 連接字符集和校對 10.3.7. 字符串文字字符集和校對 10.3.8. 在SQL語句中使用COLLATE 10.3.9. COLLATE子句優(yōu)先 10.3.10. BINARY操作符 10.3.11. 校對確定較為復(fù)雜的一些特殊情況 10.3.12. 校對必須適合字符集 10.3.13. 校對效果的示例 10.4. 字符集支持影響到的操作 10.4.1. 結(jié)果字符串 10.4.2. CONVERT() 10.4.3. CAST() 10.4.4. SHOW語句 10.5. Unicode支持 10.6. 用于元數(shù)據(jù)的UTF8 10.7. 與其它DBMS的兼容性 10.8. 新字符集配置文件格式 10.9. 國家特有字符集 10.10. MySQL支持的字符集和校對 10.10.1. Unicode字符集 10.10.2. 西歐字符集 10.10.3. 中歐字符集 10.10.4. 南歐與中東字符集 10.10.5. 波羅的海字符集 10.10.6. 西里爾字符集 10.10.7. 亞洲字符集 11. 列類型 11.1. 列類型概述 11.1.1. 數(shù)值類型概述 11.1.2. 日期和時間類型概述 11.1.3. 字符串類型概述 11.2. 數(shù)值類型 11.3. 日期和時間類型 11.3.1. DATETIME、DATE和TIMESTAMP類型 11.3.2. TIME類型 11.3.3. YEAR類型 11.3.4. Y2K事宜和日期類型 11.4. String類型 11.4.1. CHAR和VARCHAR類型 11.4.2. BINARY和VARBINARY類型 11.4.3. BLOB和TEXT類型 11.4.4. ENUM類型 11.4.5. SET類型 11.5. 列類型存儲需求 11.6. 選擇正確的列類型 11.7. 使用來自其他數(shù)據(jù)庫引擎的列類型 12. 函數(shù)和操作符 12.1. 操作符 12.1.1. 操作符優(yōu)先級 12.1.2. 圓括號 12.1.3. 比較函數(shù)和操作符 12.1.4. 邏輯操作符 12.2. 控制流程函數(shù) 12.3. 字符串函數(shù) 12.3.1. 字符串比較函數(shù) 12.4. 數(shù)值函數(shù) 12.4.1. 算術(shù)操作符 12.4.2. 數(shù)學(xué)函數(shù) 12.5. 日期和時間函數(shù) 12.6. MySQL使用什么日歷? 12.7. 全文搜索功能 12.7.1. 布爾全文搜索 12.7.2. 全文搜索帶查詢擴展 12.7.3. 全文停止字 12.7.4. 全文限定條件 12.7.5. 微調(diào)MySQL全文搜索 12.8. Cast函數(shù)和操作符 12.9. 其他函數(shù) 12.9.1. 位函數(shù) 12.9.2. 加密函數(shù) 12.9.3. 信息函數(shù) 12.9.4. 其他函數(shù) NoName 12.10.1. GROUP BY(聚合)函數(shù) 12.10.2. GROUP BY修改程序 12.10.3. 具有隱含字段的GROUP BY 13. SQL語句語法 13.1. 數(shù)據(jù)定義語句 13.1.1. ALTER DATABASE語法 13.1.2. ALTER TABLE語法 13.1.3. CREATE DATABASE語法 13.1.4. CREATE INDEX語法 13.1.5. CREATE TABLE語法 13.1.6. DROP DATABASE語法 13.1.7. DROP INDEX語法 13.1.8. DROP TABLE語法 13.1.9. RENAME TABLE語法 13.2. 數(shù)據(jù)操作語句 13.2.1. DELETE語法 13.2.2. DO語法 13.2.3. HANDLER語法 13.2.4. INSERT語法 13.2.5. LOAD DATA INFILE語法 13.2.6. REPLACE語法 13.2.7. SELECT語法 13.2.8. Subquery語法 13.2.9. TRUNCATE語法 13.2.10. UPDATE語法 13.3. MySQL實用工具語句 13.3.1. DESCRIBE語法(獲取有關(guān)列的信息) 13.3.2. USE語法 13.4. MySQL事務(wù)處理和鎖定語句 13.4.1. START TRANSACTION 13.4.2. 不能回滾的語句 13.4.3. 會造成隱式提交的語句 13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT語法 13.4.5. LOCK TABLES和UNLOCK TABLES語法 13.4.6. SET TRANSACTION語法 13.4.7. XA事務(wù) 13.5. 數(shù)據(jù)庫管理語句 13.5.1. 賬戶管理語句 13.5.2. 表維護語句 13.5.3. SET語法 13.5.4. SHOW語法 13.5.5. 其它管理語句 13.6. 復(fù)制語句 13.6.1. 用于控制主服務(wù)器的SQL語句 13.6.2. 用于控制從服務(wù)器的SQL語句 13.7. 用于預(yù)處理語句的SQL語法 14. 插件式存儲引擎體系結(jié)構(gòu) 14.1. 前言 14.2. 概述 14.3. 公共MySQL數(shù)據(jù)庫服務(wù)器層 14.4. 選擇存儲引擎 14.5. 將存儲引擎指定給表 14.6. 存儲引擎和事務(wù) 14.7. 插入存儲引擎 14.8. 拔出存儲引擎 14.9. 插件式存儲器的安全含義 15. 存儲引擎和表類型 15.1. MyISAM存儲引擎 15.1.1. MyISAM啟動選項 15.1.2. 鍵所需的空間 15.1.3. MyISAM表的存儲格式 15.1.4. MyISAM表方面的問題 15.2. InnoDB存儲引擎 15.2.1. InnoDB概述 15.2.2. InnoDB聯(lián)系信息 15.2.3. InnoDB配置 15.2.4. InnoDB啟動選項 15.2.5. 創(chuàng)建InnoDB表空間 15.2.6. 創(chuàng)建InnoDB表 15.2.7. 添加和刪除InnoDB數(shù)據(jù)和日志文件 15.2.8. InnoDB數(shù)據(jù)庫的備份和恢復(fù) 15.2.9. 將InnoDB數(shù)據(jù)庫移到另一臺機器上 15.2.10. InnoDB事務(wù)模型和鎖定 15.2.11. InnoDB性能調(diào)節(jié)提示 15.2.12. 多版本的實施 15.2.13. 表和索引結(jié)構(gòu) 15.2.14. 文件空間管理和磁盤I/O 15.2.15. InnoDB錯誤處理 15.2.16. 對InnoDB表的限制 15.2.17. InnoDB故障診斷與排除 15.3. MERGE存儲引擎 15.3.1. MERGE表方面的問題 15.4. MEMORY (HEAP)存儲引擎 15.5. BDB (BerkeleyDB)存儲引擎 15.5.1. BDB支持的操作系統(tǒng) 15.5.2. 安裝BDB 15.5.3. BDB啟動選項 15.5.4. BDB表的特性 15.5.5. 修改BDB所需的事宜 15.5.6. 對BDB表的限制 15.5.7. 使用BDB表時可能出現(xiàn)的錯誤 15.6. EXAMPLE存儲引擎 15.7. FEDERATED存儲引擎 15.7.1. 安裝FEDERATED存儲引擎 15.7.2. FEDERATED存儲引擎介紹 15.7.3. 如何使用FEDERATED表 15.7.4. FEDERATED存儲引擎的局限性 15.8. ARCHIVE存儲引擎 15.9. CSV存儲引擎 15.10. BLACKHOLE存儲引擎 16. 編寫自定義存儲引擎 16.1. 前言 16.2. 概述 16.3. 創(chuàng)建存儲引擎源文件 NoName 16.5. 對處理程序進行實例化處理 16.6. 定義表擴展 16.7. 創(chuàng)建表 16.8. 打開表 16.9. 實施基本的表掃描功能 16.9.1. 實施store_lock()函數(shù) 16.9.2. 實施external_lock()函數(shù) 16.9.3. 實施rnd_init()函數(shù) 16.9.4. 實施info()函數(shù) 16.9.5. 實施extra()函數(shù) 16.9.6. 實施rnd_next()函數(shù) 16.10. 關(guān)閉表 NoName NoName NoName 16.14. API引用 16.14.1. bas_ext 16.14.2. close 16.14.3. create 16.14.4. delete_row 16.14.5. delete_table 16.14.6. external_lock 16.14.7. extra 16.14.8. info 16.14.9. open 16.14.10. rnd_init 16.14.11. rnd_next 16.14.12. store_lock 16.14.13. update_row 16.14.14. write_row 17. MySQL簇 17.1. MySQL簇概述 17.2. MySQL簇的基本概念 17.3. 多計算機的簡單基礎(chǔ)知識 17.3.1. 硬件、軟件和聯(lián)網(wǎng) 17.3.2. 安裝 17.3.3. 配置 17.3.4. 首次啟動 17.3.5. 加載示例數(shù)據(jù)并執(zhí)行查詢 17.3.6. 安全關(guān)閉和重啟 17.4. MySQL簇的配置 17.4.1. 從源碼創(chuàng)建MySQL簇 17.4.2. 安裝軟件 17.4.3. MySQL簇的快速測試設(shè)置 17.4.4. 配置文件 17.5. MySQL簇中的進程管理 17.5.1. 用于MySQL簇的MySQL服務(wù)器進程使用 17.5.2. ndbd,存儲引擎節(jié)點進程 17.5.3. ndb_mgmd,“管理服務(wù)器”進程 17.5.4. ndb_mgm,“管理客戶端”進程 17.5.5. 用于MySQL簇進程的命令選項 17.6. MySQL簇的管理 17.6.1. MySQL簇的啟動階段 17.6.2. “管理客戶端”中的命令 17.6.3. MySQL簇中生成的事件報告 17.6.4. 單用戶模式 17.6.5. MySQL簇的聯(lián)機備份 17.7. 使用與MySQL簇的高速互連 17.7.1. 配置MySQL簇以使用SCI套接字 17.7.2. 理解簇互連的影響 17.8. MySQL簇的已知限制 17.9. MySQL簇發(fā)展的重要歷程 17.9.1. MySQL 5.0中的MySQL簇變化 17.9.2. 關(guān)于MySQL簇的MySQL 5.1發(fā)展歷程 17.10. MySQL簇常見問題解答 17.11. MySQL簇術(shù)語表 18. 分區(qū) 18.1. MySQL中的分區(qū)概述 18.2. 分區(qū)類型 18.2.1. RANGE分區(qū) 18.2.2. LIST分區(qū) 18.2.3. HASH分區(qū) 18.2.4. KEY分區(qū) 18.2.5. 子分區(qū) 18.2.6. MySQL分區(qū)處理NULL值的方式 18.3. 分區(qū)管理 18.3.1. RANGE和LIST分區(qū)的管理 18.3.2. HASH和KEY分區(qū)的管理 18.3.3. 分區(qū)維護 18.3.4. 獲取關(guān)于分區(qū)的信息 19. MySQL中的空間擴展 19.1. 前言 19.2. OpenGIS幾何模型 19.2.1. Geometry類的層次 19.2.2. 類Geometry 19.2.3. 類Point 19.2.4. 類Curve 19.2.5. 類LineString 19.2.6. 類Surface 19.2.7. 類Polygon 19.2.8. 類GeometryCollection 19.2.9. 類MultiPoint 19.2.10. 類MultiCurve 19.2.11. 類MultiLineString 19.2.12. 類MultiSurface 19.2.13. 類MultiPolygon 19.3. 支持的空間數(shù)據(jù)格式 19.3.1. 著名的文本(WKT)格式 19.3.2. 著名的二進制(WKB)格式 19.4. 創(chuàng)建具備空間功能的MySQL數(shù)據(jù)庫 19.4.1. MySQL空間數(shù)據(jù)類型 19.4.2. 創(chuàng)建空間值 19.4.3. 創(chuàng)建空間列 19.4.4. 填充空間列 19.4.5. 獲取空間數(shù)據(jù) 19.5. 分析空間信息 19.5.1. Geometry格式轉(zhuǎn)換函數(shù) 19.5.2. Geometry函數(shù) 19.5.3. 從已有Geometry創(chuàng)建新Geometry的函數(shù) 19.5.4. 測試幾何對象間空間關(guān)系的函數(shù) 19.5.5. 關(guān)于幾何最小邊界矩形(MBR)的關(guān)系 19.5.6. 測試幾何類之間空間關(guān)系的函數(shù) 19.6. 優(yōu)化空間分析 19.6.1. 創(chuàng)建空間索引 19.6.2. 使用空間索引 19.7. MySQL的一致性和兼容性 19.7.1. 尚未實施的GIS特性 20. 存儲程序和函數(shù) 20.1. 存儲程序和授權(quán)表 20.2. 存儲程序的語法 20.2.1. CREATE PROCEDURE和CREATE FUNCTION 20.2.2. ALTER PROCEDURE和ALTER FUNCTION 20.2.3. DROP PROCEDURE和DROP FUNCTION 20.2.4.SHOW CREATE PROCEDURE和SHOW CREATE FUNCTION 20.2.5.SHOW PROCEDURE STATUS和SHOW FUNCTION STATUS 20.2.6. CALL語句 20.2.7. BEGIN ... END復(fù)合語句 20.2.8. DECLARE語句 20.2.9. 存儲程序中的變量 20.2.10. 條件和處理程序 20.2.11. 光標 20.2.12. 流程控制構(gòu)造 20.3. 存儲程序、函數(shù)、觸發(fā)程序和復(fù)制:常見問題 20.4. 存儲子程序和觸發(fā)程序的二進制日志功能 21. 觸發(fā)程序 21.1. CREATE TRIGGER語法 21.2. DROP TRIGGER語法 21.3. 使用觸發(fā)程序 22. 視圖 22.1. ALTER VIEW語法 22.2. CREATE VIEW語法 22.3. DROP VIEW語法 22.4. SHOW CREATE VIEW語法 23. INFORMATION_SCHEMA信息數(shù)據(jù)庫 23.1. INFORMATION_SCHEMA表 23.1.1. INFORMATION_SCHEMA SCHEMATA表 23.1.2. INFORMATION_SCHEMA TABLES表 23.1.3. INFORMATION_SCHEMA COLUMNS表 23.1.4. INFORMATION_SCHEMA STATISTICS表 23.1.5. INFORMATION_SCHEMA USER_PRIVILEGES表 23.1.6. INFORMATION_SCHEMA SCHEMA_PRIVILEGES表 23.1.7. INFORMATION_SCHEMA TABLE_PRIVILEGES表 23.1.8. INFORMATION_SCHEMA COLUMN_PRIVILEGES表 23.1.9. INFORMATION_SCHEMA CHARACTER_SETS表 23.1.10. INFORMATION_SCHEMA COLLATIONS表 23.1.11. INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY表 23.1.12. INFORMATION_SCHEMA TABLE_CONSTRAINTS表 23.1.13. INFORMATION_SCHEMA KEY_COLUMN_USAGE表 23.1.14. INFORMATION_SCHEMA ROUTINES表 23.1.15. INFORMATION_SCHEMA VIEWS表 23.1.16. INFORMATION_SCHEMA TRIGGERS表 23.1.17. 其他INFORMATION_SCHEMA表 NoName 24. 精度數(shù)學(xué) 24.1. 數(shù)值的類型 24.2. DECIMAL數(shù)據(jù)類型更改 24.3. 表達式處理 24.4. 四舍五入 24.5. 精度數(shù)學(xué)示例 25. API和庫 25.1. libmysqld,嵌入式MySQL服務(wù)器庫 25.1.1. 嵌入式MySQL服務(wù)器庫概述 25.1.2. 使用libmysqld編譯程序 25.1.3. 使用嵌入式MySQL服務(wù)器時的限制 25.1.4. 與嵌入式服務(wù)器一起使用的選項 25.1.5. 嵌入式服務(wù)器中尚需完成的事項(TODO) 25.1.6. 嵌入式服務(wù)器示例 25.1.7. 嵌入式服務(wù)器的許可 25.2. MySQL C API 25.2.1. C API數(shù)據(jù)類型 25.2.2. C API函數(shù)概述 25.2.3. C API函數(shù)描述 25.2.4. C API預(yù)處理語句 25.2.5. C API預(yù)處理語句的數(shù)據(jù)類型 25.2.6. C API預(yù)處理語句函數(shù)概述 25.2.7. C API預(yù)處理語句函數(shù)描述 25.2.8. C API預(yù)處理語句方面的問題 25.2.9. 多查詢執(zhí)行的C API處理 25.2.10. 日期和時間值的C API處理 25.2.11. C API線程函數(shù)介紹 25.2.12. C API嵌入式服務(wù)器函數(shù)介紹 25.2.13. 使用C API時的常見問題 25.2.14. 創(chuàng)建客戶端程序 25.2.15. 如何生成線程式客戶端 25.3. MySQL PHP API 25.3.1. 使用MySQL和PHP的常見問題 25.4. MySQL Perl API 25.5. MySQL C++ API 25.5.1. Borland C++ 25.6. MySQL Python API 25.7. MySQL Tcl API 25.8. MySQL Eiffel Wrapper 25.9. MySQL程序開發(fā)實用工具 25.9.1. msql2mysql:轉(zhuǎn)換mSQL程序以用于MySQL 25.9.2. mysql_config:獲取編譯客戶端的編譯選項 26. 連接器 26.1. MySQL Connector/ODBC 26.1.1. MyODBC介紹 26.1.2. 關(guān)于ODBC和MyODBC的一般信息 26.1.3. 如何安裝MyODBC 26.1.4. 在Windows平臺上從二進制版本安裝MyODBC 26.1.5. I在Unix平臺上從二進制版本安裝MyODBC 26.1.6. 在Windows平臺上從源碼版本安裝MyODBC 26.1.7. 在Unix平臺上從源碼版本安裝MyODBC 26.1.8. 從BitKeeper開發(fā)源碼樹安裝MyODBC 26.1.9. MyODBC配置 26.1.10. 與MyODBC連接相關(guān)的事宜 26.1.11. MyODBC和Microsoft Access 26.1.12. MyODBC和Microsoft VBA及ASP 26.1.13. MyODBC和第三方ODBC工具 26.1.14. MyODBC通用功能 26.1.15. 基本的MyODBC應(yīng)用步驟 26.1.16. MyODBC API引用 26.1.17. MyODBC數(shù)據(jù)類型 26.1.18. MyODBC錯誤代碼 26.1.19. MyODBC與VB:ADO、DAO和RDO 26.1.20. MyODBC與Microsoft.NET 26.1.21. 感謝 26.2. MySQL Connector/NET 26.2.1. 前言 26.2.2. 下載并安裝MySQL Connector/NET 26.2.3. Connector/NET體系結(jié)構(gòu) 26.2.4. 使用MySQL Connector/NET 26.2.5. MySQL Connector/NET變更史 26.3. MySQL Connector/J 26.3.1. 基本的JDBC概念 26.3.2. 安裝 Connector/J 26.3.3. JDBC引用 26.3.4. 與J2EE和其他Java框架一起使用 Connector/J 26.3.5. 診斷 Connector/J方面的問題 26.3.6. Changelog 26.4. MySQL Connector/MXJ 26.4.1. 前言 26.4.2. 支持平臺: 26.4.3. Junit測試要求 26.4.4. 運行Junit測試 26.4.5. 作為JDBC驅(qū)動程序的一部分運行 26.4.6. 在Java對象中運行 26.4.7. MysqldResource API 26.4.8. 在JMX代理(custom)中運行 26.4.9. 部署在標準的JMX代理環(huán)境下 (JBoss) 26.4.10. 安裝 27. 擴展MySQL 27.1. MySQL內(nèi)部控件 27.1.1. MySQL線程 27.1.2. MySQL測試套件 27.2. 為MySQL添加新函數(shù) 27.2.1. 自定義函數(shù)接口的特性 27.2.2. CREATE FUNCTION/DROP FUNCTION語法 27.2.3. 添加新的自定義函數(shù) 27.2.4. 添加新的固有函數(shù) 27.3. 為MySQL添加新步驟 27.3.1. 步驟分析 27.3.2. 編寫步驟 A. 問題和常見錯誤 A.1. 如何確定導(dǎo)致問題的原因 A.2. 使用MySQL程序時的常見錯誤 A.2.1. 拒絕訪問 A.2.2. 無法連接到[local] MySQL服務(wù)器 A.2.3. 客戶端不支持鑒定協(xié)議 A.2.4. 輸入密碼時出現(xiàn)密碼錯誤 NoName A.2.6. 連接數(shù)過多 A.2.7. 內(nèi)存溢出 A.2.8. MySQL服務(wù)器不可用 A.2.9. 信息包過大 A.2.10. 通信錯誤和失效連接 A.2.11. 表已滿 A.2.12. 無法創(chuàng)建文件/寫入文件 A.2.13. 命令不同步 A.2.14. 忽略用戶 A.2.15. 表tbl_name不存在 A.2.16. 無法初始化字符集 A.2.17. 文件未找到 A.3. 與安裝有關(guān)的事宜 A.3.1. 與MySQL客戶端庫的鏈接問題 A.3.2. 如何以普通用戶身份運行MySQL A.3.3. 與文件許可有關(guān)的問題 A.4. 與管理有關(guān)的事宜 A.4.1. 如何復(fù)位根用戶密碼 A.4.2. 如果MySQL依然崩潰,應(yīng)作些什么 A.4.3. MySQL處理磁盤滿的方式 A.4.4. MySQL將臨時文件儲存在哪里 A.4.5. 如何保護或更改MySQL套接字文件/tmp/mysql.sock A.4.6. 時區(qū)問題 A.5. 與查詢有關(guān)的事宜 A.5.1. 搜索中的大小寫敏感性 A.5.2. 使用DATE列方面的問題 A.5.3. 與NULL值有關(guān)的問題 A.5.4. 與列別名有關(guān)的問題 A.5.5. 非事務(wù)表回滾失敗 A.5.6. 從相關(guān)表刪除行 A.5.7. 解決與不匹配行有關(guān)的問題 A.5.8. 與浮點比較有關(guān)的問題 A.6. 與優(yōu)化器有關(guān)的事宜 A.7. 與表定義有關(guān)的事宜 A.7.1. 與ALTER TABLE有關(guān)的問題 A.7.2. 如何更改表中的列順序 A.7.3. TEMPORARY TABLE問題 A.8. MySQL中的已知事宜 A.8.1. MySQL中的打開事宜 B. 錯誤代碼和消息 B.1. 服務(wù)器錯誤代碼和消息 B.2. 客戶端錯誤代碼和消息 C. 感謝 C.1. MySQL AB處的開發(fā)人 C.2. MySQL貢獻人 C.3. 資料員和譯員 C.4. MySQL使用和包含的庫 C.5. 支持MySQL的軟件包 C.6. 用于創(chuàng)建MySQL的工具 C.7. MySQL支持人員 D. MySQL變更史 D.1. 5.1.x版中的變更情況(開發(fā)) D.1.1. 5.1.2版中的變更情況(尚未發(fā)布) D.1.2. 5.1.1版中的變更情況(尚未發(fā)布) D.2. MyODBC的變更情況 D.2.1. MyODBC 3.51.12的變更情況 D.2.2. MyODBC 3.51.11的變更情況 E. 移植到其他系統(tǒng) E.1. 調(diào)試MySQL服務(wù)器 E.1.1. 針對調(diào)試編譯MySQL E.1.2. 創(chuàng)建跟蹤文件 E.1.3. 在gdb環(huán)境下調(diào)試mysqld E.1.4. 使用堆棧跟蹤 E.1.5. 使用日志文件找出mysqld中的錯誤原因 E.1.6. 如果出現(xiàn)表崩潰,請生成測試案例 E.2. 調(diào)試MySQL客戶端 E.3. DBUG軟件包 E.4. 關(guān)于RTS線程的注釋 E.5. 線程軟件包之間的差異 F. 環(huán)境變量 G. MySQL正則表達式 H. MySQL中的限制 H.1. 聯(lián)合的限制 I. 特性限制 I.1. 對存儲子程序和觸發(fā)程序的限制 I.2. 對服務(wù)器端光標的限制 I.3. 對子查詢的限制 I.4. 對視圖的限制 I.5. 對XA事務(wù)的限制 J. GNU通用公共許可 K. MySQL FLOSS許可例外 索引
??

第10章:字符集支持

目錄

10.1. 常規(guī)字符集和校對
10.2. MySQL中的字符集和校對
10.3. 確定默認字符集和校對
10.3.1. 服務(wù)器字符集和校對
10.3.2. 數(shù)據(jù)庫字符集和校對
10.3.3. 表字符集和校對
10.3.4. 列字符集和校對
10.3.5. 字符集和校對分配示例
10.3.6. 連接字符集和校對
10.3.7. 字符串文字字符集和校對
10.3.8. 在SQL語句中使用COLLATE
10.3.9. COLLATE子句優(yōu)先
10.3.10. BINARY操作符
10.3.11. 校對確定較為復(fù)雜的一些特殊情況
10.3.12. 校對必須適合字符集
10.3.13. 校對效果的示例
10.4. 字符集支持影響到的操作
10.4.1. 結(jié)果字符串
10.4.2. CONVERT()
10.4.3. CAST()
10.4.4. SHOW語句
10.5. Unicode支持
10.6. 用于元數(shù)據(jù)的UTF8
10.7. 與其它DBMS的兼容性
10.8. 新字符集配置文件格式
10.9. 國家特有字符集
10.10. MySQL支持的字符集和校對
10.10.1. Unicode字符集
10.10.2. 西歐字符集
10.10.3. 中歐字符集
10.10.4. 南歐與中東字符集
10.10.5. 波羅的海字符集
10.10.6. 西里爾字符集
10.10.7. 亞洲字符集

本章討論以下主題:

·???????? 什么是字符集和校對規(guī)則?

·???????? 多級默認系統(tǒng)

·???????? 字符集語法

·???????? 相關(guān)函數(shù)和運算

·???????? Unicode支持

·???????? 每個字符集和校對規(guī)則的含義

MySQL5.1中的字符集支持包括在MyISAM、MEMORYInnoDB存儲引擎中。

10.1.?常規(guī)字符集和校對

字符集是一套符號和編碼。校對規(guī)則是在字符集內(nèi)用于比較字符的一套規(guī)則。讓我們使用一個假想字符集的例子來區(qū)別清楚。

假設(shè)我們有一個字母表使用了四個字母:‘A’、‘B’、‘a’、‘b’。我們?yōu)槊總€字母賦予一個數(shù)值:‘A=0,‘B= 1,‘a= 2,‘b= 3。字母‘A’是一個符號,數(shù)字0是‘A’的編碼,這四個字母和它們的編碼組合在一起是一個字符集

假設(shè)我們希望比較兩個字符串的值:‘A’和‘B’。比較的最簡單的方法是查找編碼:‘A’為0,‘B’為1。因為0 小于1,我們可以說‘A’小于‘B’。我們做的僅僅是在我們的字符集上應(yīng)用了一個 校對規(guī)則。校對規(guī)則是一套規(guī)則(在這種情況下僅僅是一套規(guī)則):“對編碼進行比較。”我們稱這種全部可能的規(guī)則中的最簡單的 校對規(guī)則為一個binary(二元)校對規(guī)則。

但是,如果我們希望小寫字母和大寫字母是等價的,應(yīng)該怎樣?那么,我們將至少有兩個規(guī)則:(1)把小寫字母‘a’和‘b’視為與‘A’和‘B’等價;(2)然后比較編碼。我們稱這是一個大小寫不敏感的 校對規(guī)則。比二元校對規(guī)則復(fù)雜一些。

在實際生活中,大多數(shù)字符集有許多字符:不僅僅是‘A’和‘B’,而是整個字母表,有時候有許多種字母表,或者一個東方的使用上千個字符的書寫系統(tǒng),還有許多特殊符號和標點符號。并且在實際生活中,大多數(shù) 校對規(guī)則有許多個規(guī)則:不僅僅是大小寫不敏感,還包括重音符不敏感(“重音符” 是附屬于一個字母的符號,象德語的‘?’符號)和多字節(jié)映射(例如,作為規(guī)則‘?=OE’就是兩個德語 校對規(guī)則的一種)。

MySQL5.1能夠做這些事情:

·???????? 使用多種字符集來存儲字符串

·???????? 使用多種校對規(guī)則來比較字符串

·???????? 在同一臺服務(wù)器、同一個數(shù)據(jù)庫或甚至在同一個表中使用不同字符集或校對規(guī)則來混合字符串

·???????? 允許定義任何級別的字符集和校對規(guī)則

在這些方面,MySQL5.1不僅比MySQL4.1以前的版本靈活得多,而且比其它大多數(shù)數(shù)據(jù)庫管理系統(tǒng)超前許多。但是,為了有效地使用這些功能,你需要了解哪些字符集和 校對規(guī)則是可用的,怎樣改變默認值,以及它們怎樣影響字符操作符和字符串函數(shù)的行為。

10.2.?MySQL中的字符集和校對

MySQL服務(wù)器能夠支持多種字符集??梢允褂?span>SHOW CHARACTER SET語句列出可用的字符集:

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

(完整列表參見10.10節(jié),“MySQL支持的字符集和校對”。)

任何一個給定的字符集至少有一個校對規(guī)則。它可能有幾個校對規(guī)則。

要想列出一個字符集的校對規(guī)則,使用SHOW COLLATION語句。例如,要想查看latin1(“西歐ISO-8859-1)字符集的 校對規(guī)則,使用下面的語句查找那些名字以latin1開頭的 校對規(guī)則:

mysql> SHOW COLLATION LIKE 'latin1%';
+---------------------+---------+----+---------+----------+---------+
| Collation?????????? | Charset | Id | Default | Compiled | Sortlen |
+---------------------+---------+----+---------+----------+---------+
| latin1_german1_ci?? | latin1? |? 5 |???????? |????????? |?????? 0 |
| latin1_swedish_ci?? | latin1? |? 8 | Yes???? | Yes????? |?????? 1 |
| latin1_danish_ci??? | latin1? | 15 |???????? |????????? |?????? 0 |
| latin1_german2_ci?? | latin1? | 31 |???????? | Yes????? |?????? 2 |
| latin1_bin????????? | latin1? | 47 |???????? | Yes????? |?????? 1 |
| latin1_general_ci?? | latin1? | 48 |???????? |????????? |?????? 0 |
| latin1_general_cs?? | latin1? | 49 |???????? |????????? |?????? 0 |
| latin1_spanish_ci?? | latin1? | 94 |???????? |????????? |?????? 0 |
+---------------------+---------+----+---------+----------+---------+

latin1校對規(guī)則有下面的含義:

校對規(guī)則

含義

latin1_german1_ci

德國DIN-1

latin1_swedish_ci

瑞典/芬蘭

latin1_danish_ci

丹麥/挪威

latin1_german2_ci

德國 DIN-2

latin1_bin

符合latin1編碼的二進制

latin1_general_ci

多種語言(西歐)

latin1_general_cs

多種語言(西歐ISO),大小寫敏感

latin1_spanish_ci

現(xiàn)代西班牙

校對規(guī)則一般有這些特征:

·???????? 兩個不同的字符集不能有相同的校對規(guī)則。

·???????? 每個字符集有一個默認校對規(guī)則。例如,latin1默認校對規(guī)則是latin1_swedish_ci。

·???????? 存在校對規(guī)則命名約定:它們以其相關(guān)的字符集名開始,通常包括一個語言名,并且以_ci(大小寫不敏感)、_cs(大小寫敏感)或_bin(二元)結(jié)束。

10.3.?確定默認字符集和校對

10.3.1. 服務(wù)器字符集和校對
10.3.2. 數(shù)據(jù)庫字符集和校對
10.3.3. 表字符集和校對
10.3.4. 列字符集和校對
10.3.5. 字符集和校對分配示例
10.3.6. 連接字符集和校對
10.3.7. 字符串文字字符集和校對
10.3.8. 在SQL語句中使用COLLATE
10.3.9. COLLATE子句優(yōu)先
10.3.10. BINARY操作符
10.3.11. 校對確定較為復(fù)雜的一些特殊情況
10.3.12. 校對必須適合字符集
10.3.13. 校對效果的示例
字符集和校對規(guī)則有4個級別的默認設(shè)置:服務(wù)器級、數(shù)據(jù)庫級、表級和連接級。以下描述可能顯得復(fù)雜,但是在實際應(yīng)用中可以發(fā)現(xiàn)使用多種級別會使結(jié)果自然而明顯。

10.3.1.?服務(wù)器字符集和校對

MySQL服務(wù)器有一個服務(wù)器字符集和一個服務(wù)器校對規(guī)則,它們均不能設(shè)置為空。

MySQL按照如下方法確定服務(wù)器字符集和服務(wù)器校對規(guī)則:

·???????? 當服務(wù)器啟動時根據(jù)有效的選項設(shè)置

·???????? 根據(jù)運行時的設(shè)定值

在服務(wù)器級別,確定方法很簡單。當啟動mysqld時,根據(jù)使用的初始選項設(shè)置來確定服務(wù)器字符集和 校對規(guī)則??梢允褂?/span>--default-character-set設(shè)置字符集,并且可以在字符集后面為 校對規(guī)則添加--default-collation。如果沒有指定一個字符集,那就與--default-character-set=latin1相同。如果你僅指定了一個字符集(例如,latin1),但是沒有指定一個 校對規(guī)則,那就與--default-charset=latin1 --default-collation=latin1_swedish_ci相同,因為latin1_swedish_cilatin1默認校對規(guī)則。因此,以下三個命令有相同的效果:

shell> mysqld

shell> mysqld --default-character-set=latin1

shell> mysqld --default-character-set=latin1 \

?????????? --default-collation=latin1_swedish_ci

更改設(shè)定值的一個方法是通過重新編譯。如果希望在從源程序構(gòu)建時更改默認服務(wù)器字符集和校對規(guī)則,使用:--with-charset--with-collation作為configure的參量。例如:

shell> ./configure --with-charset=latin1

或者:

shell> ./configure --with-charset=latin1 \

?????????? --with-collation=latin1_german1_ci

mysqldconfigure都驗證字符集/校對規(guī)則組合是否有效。如果無效,每個程序都顯示一個錯誤信息,然后終止。

當前的服務(wù)器字符集和校對規(guī)則可以用作character_set_servercollation_server系統(tǒng)變量的值。在運行時能夠改變這些變量的值。

10.3.2.?數(shù)據(jù)庫字符集和校對

每一個數(shù)據(jù)庫有一個數(shù)據(jù)庫字符集和一個數(shù)據(jù)庫校對規(guī)則,它不能夠為空。CREATE DATABASEALTER DATABASE語句有一個可選的子句來指定數(shù)據(jù)庫字符集和校對規(guī)則:
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 db_name
??? DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;

MySQL這樣選擇數(shù)據(jù)庫字符集和數(shù)據(jù)庫校對規(guī)則:

·???????? 如果指定了CHARACTER SET XCOLLATE Y,那么采用字符集X和校對規(guī)則Y

·???????? 如果指定了CHARACTER SET X而沒有指定COLLATE Y,那么采用CHARACTER SET XCHARACTER SET X的默認校對規(guī)則。

·???????? 否則,采用服務(wù)器字符集和服務(wù)器校對規(guī)則。

MySQLCREATE DATABASE ... DEFAULT CHARACTER SET ...語法與標準SQLCREATE SCHEMA ... CHARACTER SET ...語法類似。因此,可以在同一個MySQL服務(wù)器上創(chuàng)建使用不同字符集和 校對規(guī)則的數(shù)據(jù)庫。

如果在CREATE TABLE語句中沒有指定表字符集和校對規(guī)則,則使用數(shù)據(jù)庫字符集和校對規(guī)則作為默認值。它們沒有其它目的。

默認數(shù)據(jù)庫的字符集和校對規(guī)則可以用作character_set_databasecollation_database系統(tǒng)變量。無論何時默認數(shù)據(jù)庫更改了,服務(wù)器都設(shè)置這兩個變量的值。如果沒有 默認數(shù)據(jù)庫,這兩個變量與相應(yīng)的服務(wù)器級別的變量(character_set_servercollation_server)具有相同的值。

10.3.3.?表字符集和校對

每一個表有一個表字符集和一個校對規(guī)則,它不能為空。為指定表字符集和校對規(guī)則,CREATE TABLE ALTER TABLE語句有一個可選的子句:
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 ( ... )

DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;

MySQL按照下面的方式選擇表字符集和 校對規(guī)則:

·???????? 如果指定了CHARACTER SET XCOLLATE Y,那么采用CHARACTER SET XCOLLATE Y。

·???????? 如果指定了CHARACTER SET X而沒有指定COLLATE Y,那么采用CHARACTER SET XCHARACTER SET X的默認校對規(guī)則。

·???????? 否則,采用服務(wù)器字符集和服務(wù)器校對規(guī)則。

如果在列定義中沒有指定列字符集和校對規(guī)則,則默認使用表字符集和校對規(guī)則。表字符集和校對規(guī)則是MySQL的擴展;在標準SQL中沒有。

10.3.4.?列字符集和校對

每一個“字符”列(即,CHAR、VARCHARTEXT類型的列)有一個列字符集和一個列 校對規(guī)則,它不能為空。列定義語法有一個可選子句來指定列字符集和校對規(guī)則:
col_name {CHAR | VARCHAR | TEXT} (col_length)
??? [CHARACTER SET charset_name [COLLATE collation_name]]

例如:

CREATE TABLE Table1

(

??? column1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_german1_ci

);

MySQL按照下面的方式選擇列字符集和校對規(guī)則:

·???????? 如果指定了CHARACTER SET XCOLLATE Y,那么采用CHARACTER SET XCOLLATE Y。

·???????? 如果指定了CHARACTER SET X而沒有指定COLLATE Y,那么采用CHARACTER SET XCHARACTER SET X的默認校對規(guī)則。

·???????? 否則,采用表字符集和服務(wù)器校對規(guī)則。

CHARACTER SETCOLLATE子句是標準的SQL。

10.3.5.?字符集和校對分配示例

以下例子顯示了MySQL怎樣確定默認字符集和校對規(guī)則。

示例1:表和列定義

CREATE TABLE t1
(
??? c1 CHAR(10) CHARACTER SET latin1 COLLATE latin1_german1_ci
) DEFAULT CHARACTER SET latin2 COLLATE latin2_bin;

在這里我們有一個列使用latin1字符集和latin1_german1_ci校對規(guī)則。是顯式的定義,因此簡單明了。需要注意的是,在一個latin2表中存儲一個latin1列不會存在問題。

示例2:表和列定義

CREATE TABLE t1
(
??? c1 CHAR(10) CHARACTER SET latin1
) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;

這次我們有一個列使用latin1字符集和一個默認校對規(guī)則。盡管它顯得自然,默認校對規(guī)則卻不是表級。相反,因為latin1的默認校對規(guī)則總是latin1_swedish_ci,列c1有一個校對規(guī)則latin1_swedish_ci(而不是latin1_danish_ci)。

示例3:表和列定義

CREATE TABLE t1
(
??? c1 CHAR(10)
) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;

我們有一個列使用一個默認字符集和一個默認校對規(guī)則。在這種情況下,MySQL查找表級別來確定列字符集和 校對規(guī)則。因此,列c1的字符集是latin1,它的 校對規(guī)則是latin1_danish_ci。

示例4:數(shù)據(jù)庫、表和列定義

CREATE DATABASE d1
??? DEFAULT CHARACTER SET latin2 COLLATE latin2_czech_ci;
USE d1;
CREATE TABLE t1
(
??? c1 CHAR(10)
);

我們創(chuàng)建了一個沒有指定字符集和校對規(guī)則的列。我們也沒有指定表級字符集和校對規(guī)則。在這種情況下,MySQL查找數(shù)據(jù)庫級的相關(guān)設(shè)置。(數(shù)據(jù)庫的設(shè)置變?yōu)楸淼脑O(shè)置,其后變?yōu)榱械脑O(shè)置。)因此,列c1的字符集為是latin2,它的 校對規(guī)則是latin2_czech_ci。

10.3.6.?連接字符集和校對

一些字符集和校對規(guī)則系統(tǒng)變量與客戶端和服務(wù)器的交互有關(guān)。在前面的章節(jié)中已經(jīng)提到過部分內(nèi)容:

·???????? 服務(wù)器字符集和校對規(guī)則可以用作character_set_servercollation_server變量的值。

·???????? 默認數(shù)據(jù)庫的字符集和校對規(guī)則可以用作character_set_databasecollation_database變量的值。

在客戶端和服務(wù)器的連接處理中也涉及了字符集和校對規(guī)則變量。每一個客戶端有一個連接相關(guān)的字符集和校對規(guī)則變量。

考慮什么是一個“連接”:它是連接服務(wù)器時所作的事情??蛻舳税l(fā)送SQL語句,例如查詢,通過連接發(fā)送到服務(wù)器。服務(wù)器通過連接發(fā)送響應(yīng)給客戶端,例如結(jié)果集。對于客戶端連接,這樣會導(dǎo)致一些關(guān)于連接的字符集和 校對規(guī)則的問題,這些問題均能夠通過系統(tǒng)變量來解決:

·???????? 當查詢離開客戶端后,在查詢中使用哪種字符集?

服務(wù)器使用character_set_client變量作為客戶端發(fā)送的查詢中使用的字符集。

·???????? 服務(wù)器接收到查詢后應(yīng)該轉(zhuǎn)換為哪種字符集?

轉(zhuǎn)換時,服務(wù)器使用character_set_connectioncollation_connection系統(tǒng)變量。它將客戶端發(fā)送的查詢從character_set_client系統(tǒng)變量轉(zhuǎn)換到character_set_connection(除非字符串文字具有象_latin1_utf8的引介詞)。collation_connection對比較文字字符串是重要的。對于列值的字符串比較,它不重要,因為列具有更高的 校對規(guī)則優(yōu)先級。

·???????? 服務(wù)器發(fā)送結(jié)果集或返回錯誤信息到客戶端之前應(yīng)該轉(zhuǎn)換為哪種字符集?

character_set_results變量指示服務(wù)器返回查詢結(jié)果到客戶端使用的字符集。包括結(jié)果數(shù)據(jù),例如列值和結(jié)果元數(shù)據(jù)(如列名)。

你能夠調(diào)整這些變量的設(shè)置,或可以依賴默認值(這樣,你可以跳過本章)。

有兩個語句影響連接字符集:

SET NAMES 'charset_name'
SET CHARACTER SET charset_name

SET NAMES顯示客戶端發(fā)送的SQL語句中使用什么字符集。因此,SET NAMES 'cp1251'語句告訴服務(wù)器“將來從這個客戶端傳來的信息采用字符集cp1251。它還為服務(wù)器發(fā)送回客戶端的結(jié)果指定了字符集。(例如,如果你使用一個SELECT語句,它表示列值使用了什么字符集。)

SET NAMES 'x'語句與這三個語句等價:

mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET character_set_connection = x;

x設(shè)置為character_set_connection也就設(shè)置了collation_connectionx的默認校對規(guī)則。

SET CHARACTER SET語句是類似的,但是為 默認數(shù)據(jù)庫設(shè)置連接字符集和校對規(guī)則。SET CHARACTER SET x語句與這三個語句等價:

mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET collation_connection = @@collation_database;

當一個客戶端連接時,它向服務(wù)器發(fā)送希望使用的字符集名稱。服務(wù)器為那個字符集設(shè)置character_set_client、character_set_resultscharacter_set_connection變量。(實際上,服務(wù)器為使用該字符集執(zhí)行一個SET NAMES操作。)

對于mysql客戶端,如果你希望使用與默認字符集不同的字符集,不需要每次啟動時執(zhí)行SET NAMES語句??梢栽?strong>mysql語句行中或者選項文件中添加一個--default-character-set選項設(shè)置。例如,你每次運行mysql時,以下的選項文件設(shè)置把三個字符集變量修改為koi8r

[mysql]

default-character-set=koi8r

例如:假設(shè)column1定義為CHAR(5) CHARACTER SET latin2。如果沒有設(shè)定SET NAMESSET CHARACTER SET,那么對于SELECT column1 FROM t,當連接后,服務(wù)器使用客戶端指定的字符集返回列column1的所有值。另一方面,如果你設(shè)定SET NAMES 'latin1'SET CHARACTER SET latin1,那么發(fā)送結(jié)果之前,服務(wù)器轉(zhuǎn)換latin2值到latin1。轉(zhuǎn)換可能會丟失那些不屬于兩種字符集的字符。

如果不希望服務(wù)器執(zhí)行任何轉(zhuǎn)換,設(shè)置character_set_resultsNULL

mysql> SET character_set_results = NULL;

10.3.7.?字符串文字字符集和校對

每一字符串字符文字有一個字符集和一個校對規(guī)則,它不能為空。

一個字符串文字可能有一個可選的字符集引介詞和COLLATE子句:

[_charset_name]'string' [COLLATE collation_name]

例如:

SELECT 'string';
SELECT _latin1'string';
SELECT _latin1'string' COLLATE latin1_danish_ci;

對于簡單的語句SELECT 'string',字符串使用由character_set_connectioncollation_connection系統(tǒng)變量定義的字符集和 校對規(guī)則。

_charset_name表達式正式稱做一個引介詞。它告訴解析程序,“后面將要出現(xiàn)的字符串使用字符集X”因為以前人們對此感到困惑,我們強調(diào)引介詞不導(dǎo)致任何轉(zhuǎn)換; 它僅是一個符號,不改變字符串的值。引介詞在標準十六進制字母和數(shù)字十六進制符號(x'literal'0xnnnn)中是合法的,以及(當在一個編程語言接口中使用預(yù)處理的語句時進行參數(shù)替換)。

例如:

SELECT _latin1 x'AABBCC';
SELECT _latin1 0xAABBCC;
SELECT _latin1 ?;

MySQL這樣確定一個文字字符集和校對規(guī)則:

·???????? 如果指定了CHARACTER SET XCOLLATE Y,那么使用CHARACTER SET XCOLLATE Y。

·???????? 如果指定了CHARACTER SET X而沒有指定COLLATE Y,那么使用CHARACTER SET XCHARACTER SET X的默認校對規(guī)則。

·???????? 否則,使用通過character_set_connection collation_connection系統(tǒng)變量給出的字符集和 校對規(guī)則。

例如:

·???????? 使用latin1字符集和latin1_german1_ci校對規(guī)則的字符串:

·??????????????? SELECT _latin1'Müller' COLLATE latin1_german1_ci;

·???????? 使用latin1字符集和其默認校對規(guī)則的字符串(即,latin1_swedish_ci):

·??????????????? SELECT _latin1'Müller';

·???????? 使用連接默認字符集和校對規(guī)則的字符串:

·??????????????? SELECT 'Müller';

字符集引介詞和COLLATE子句是根據(jù)標準SQL規(guī)范實現(xiàn)的。

10.3.8.?在SQL語句中使用COLLATE

  • 使用COLLATE子句,能夠為一個比較覆蓋任何默認校對規(guī)則。COLLATE可以用于多種SQL語句中。下面是一些例子:

    ·???????? 使用ORDER BY

    ·??????????????? SELECT k
    ·??????????????? FROM t1
    ·??????????????? ORDER BY k COLLATE latin1_german2_ci;

    ·???????? 使用AS

    ·??????????????? SELECT k COLLATE latin1_german2_ci AS k1
    ·??????????????? FROM t1
    ·??????????????? ORDER BY k1;

    ·???????? 使用GROUP BY

    ·??????????????? SELECT k
    ·??????????????? FROM t1
    ·??????????????? GROUP BY k COLLATE latin1_german2_ci;

    ·???????? 使用聚合函數(shù):

    ·??????????????? SELECT MAX(k COLLATE latin1_german2_ci)
    ·??????????????? FROM t1;

    ·???????? 使用DISTINCT

    ·??????????????? SELECT DISTINCT k COLLATE latin1_german2_ci
    ·??????????????? FROM t1;

    ·???????? 使用WHERE

    ·??????????????? ?????SELECT *
    ·??????????????? ?????FROM t1
    ·??????????????? ?????WHERE _latin1 'Müller' COLLATE latin1_german2_ci = k;
    ·??????????????? ?????SELECT *
    ·??????????????? ?????FROM t1
    ·??????????????? ?????WHERE k LIKE _latin1 'Müller' COLLATE latin1_german2_ci;

    ·???????? 使用HAVING

    ·??????????????? SELECT k
    ·??????????????? FROM t1
    ·??????????????? GROUP BY k
    ·??????????????? HAVING k = _latin1 'Müller' COLLATE latin1_german2_ci;

10.3.9.?COLLATE子句優(yōu)先

COLLATE子句有較高的優(yōu)先級(高于||),因此下面兩個表達式是等價的:

x || y COLLATE z
x || (y COLLATE z)

10.3.10.?BINARY操作符

BINARY操作符是COLLATE子句的一個速記符。BINARY 'x'等價與'x' COLLATE y,這里y是字符集'x'二元 校對規(guī)則的名字。每一個字符集有一個二元校對規(guī)則。例如,latin1字符集的二元 校對規(guī)則是latin1_bin,因此,如果列a是字符集latin1,以下兩個語句有相同效果:
SELECT * FROM t1 ORDER BY BINARY a;
SELECT * FROM t1 ORDER BY a COLLATE latin1_bin;

10.3.11.?校對確定較為復(fù)雜的一些特殊情況

在絕大多數(shù)查詢中,MySQL使用哪種校對規(guī)則進行比較是很顯然的。例如,在下列情況中,校對規(guī)則明顯的是“x的列校對規(guī)則”:

SELECT x FROM T ORDER BY x;
SELECT x FROM T WHERE x = x;
SELECT DISTINCT x FROM T;

但是,當涉及多個操作數(shù)時,可能不明確。例如:

SELECT x FROM T WHERE x = 'Y';

這個查詢應(yīng)該使用列x的 校對規(guī)則,還是字符串文字'Y'的 校對規(guī)則?

標準化SQL使用“可壓縮性”規(guī)則解決這種問題?;旧希@個意思是:既然x'Y'都有 校對規(guī)則,哪個校對規(guī)則優(yōu)先?這可能比較難解決,但是以下規(guī)則適合大多數(shù)情況:

·???????? 一個外在的COLLATE子句可壓縮性是0(根本不能壓縮。)

·???????? 使用不同校對規(guī)則的兩個字符串連接的可壓縮性是1。

·???????? 列校對規(guī)則的可壓縮性是2。

·???????? 系統(tǒng)常數(shù)”(如USER()VERSION()函數(shù)返回的字符串)可壓縮性是3

·???????? 文字規(guī)則的可壓縮性是4。

·???????? NULL或從NULL派生的表達式的可壓縮性是 5。

上述可壓縮性值是MySQL5.1當前所用的。

這樣上述規(guī)則可以模糊解決:

·???????? 使用最低的可壓縮性值的校對規(guī)則。

·???????? 如果兩側(cè)有相同的可壓縮性,那么如果校對規(guī)則不同則發(fā)生錯誤。

例如:

column1 = 'A'

使用column1的校對規(guī)則

column1 = 'A' COLLATE x

使用'A'的校對規(guī)則

column1 COLLATE x = 'A' COLLATE y

錯誤

使用COERCIBILITY()函數(shù)確定一個字符串表達式的可壓縮性:

mysql> SELECT COERCIBILITY('A' COLLATE latin1_swedish_ci);
??????? -> 0
mysql> SELECT COERCIBILITY(VERSION());
??????? -> 3
mysql> SELECT COERCIBILITY('A');
??????? -> 4

見12.9.3節(jié),“信息函數(shù)”。

沒有系統(tǒng)常數(shù)或可忽略的壓縮性。函數(shù)如USER()的可壓縮性是2而不是3,文字的可壓縮性是3而不是4

10.3.12.?校對必須適合字符集

請注意每個字符集有一個或多個校對規(guī)則,并且每個校對規(guī)則只能屬于一個字符集。因此,以下語句會產(chǎn)生一個錯誤信息,因為校對規(guī)則latin2_bin對于字符集latin1非法:

mysql> SELECT _latin1 'x' COLLATE latin2_bin;

ERROR 1251: COLLATION 'latin2_bin' is not valid

for CHARACTER SET 'latin1'

10.3.13.?校對效果的示例

假設(shè)表T中的列X有這些latin1列值:

Muffler

Müller

MX Systems

MySQL

假設(shè)使用下面的語句獲取列值:

SELECT X FROM T ORDER BY X COLLATE collation_name;

使用不同校對規(guī)則的列值結(jié)果排序見下表:

latin1_swedish_ci

latin1_german1_ci

latin1_german2_ci

Muffler

Muffler

Müller

MX系統(tǒng)

Müller

Muffler

Müller

MX系統(tǒng)

MX系統(tǒng)

MySQL

MySQL

MySQL

本表顯示了我們在ORDER BY字句中使用不同所校對規(guī)則的效果的示例。在本例中導(dǎo)致不同排序的字符是上面帶有兩個圓點的Uü),它在德語中發(fā)音為"U-umlaut"。

·???????? 第一列顯示的是使用瑞典/芬蘭校對規(guī)則的SELECT語句的結(jié)果,它被稱作U-umlaut使用Y排序。

·???????? 第二列顯示的是使用德語DIN-1校對規(guī)則的SELECT語句的結(jié)果,它被稱作U-umlaut使用U排序。

·???????? 第三列顯示的是使用德語DIN-2校對規(guī)則的SELECT語句的結(jié)果,它被稱作U-umlaut使用UE排序。

10.4.?字符集支持影響到的操作

10.4.1. 結(jié)果字符串
10.4.2. CONVERT()
10.4.3. CAST()
10.4.4. SHOW語句
本節(jié)討論在MySQL5.1中考慮到字符集信息的操作。

10.4.1.?結(jié)果字符串

MySQL中有許多操作符和函數(shù)可以返回字符串。本節(jié)回答這個問題:返回的字符串使用什么字符集和 校對規(guī)則?

對于簡單的函數(shù),即接收字符串輸入然后返回一個字符串結(jié)果作為輸出的函數(shù),輸出的字符集和校對規(guī)則與原始輸入的相同。例如,UPPERX返回一個字符串,其字符和 校對規(guī)則與X相同。類似的函數(shù)還有INSTR()LCASE()、LOWER()LTRIM()、MID()、REPEAT()REPLACE()、REVERSE()RIGHT()、RPAD()、RTRIM()SOUNDEX()、SUBSTRING()TRIM()、UCASE()UPPER()。(還需要注意:REPLACE()函數(shù)不同于其它函數(shù),它總是忽略輸入字符串的 校對規(guī)則,并且進行大小寫不敏感的比較。)

對于合并多個字符串輸入并且返回單個字符串輸出的運算,應(yīng)用標準SQL“聚合規(guī)則”:

·???????? 如果存在顯式的校對規(guī)則X,那么使用X。

·???????? 如果存在顯式的校對規(guī)則XY,那么產(chǎn)生一個錯誤。

·???????? 否則,如果全部校對規(guī)則是X,那么使用X。

·???????? 其它情況,結(jié)果沒有校對規(guī)則。

例如,使用CASE ... WHEN a THEN b WHEN b THEN c COLLATE X END。結(jié)果校對規(guī)則是X。對于CASEUNION、||CONCAT()、ELT()、GREATEST()、IF()LEAST()情況相同。

對于轉(zhuǎn)換為字符數(shù)據(jù)的運算,從運算得到的結(jié)果字符串的字符集和校對規(guī)則由character_set_connectioncollation_connection系統(tǒng)變量定義。這適用于CAST()、CHAR()、CONV()、FORMAT()、HEX()SPACE()函數(shù)。

10.4.2.?CONVERT()

CONVERT()提供一個在不同字符集之間轉(zhuǎn)換數(shù)據(jù)的方法。語法是:
CONVERT(expr USING transcoding_name)

MySQL中,轉(zhuǎn)換代碼名與相應(yīng)的字符集名相同。

例子:

SELECT CONVERT(_latin1'Müller' USING utf8);
INSERT INTO utf8table (utf8column)
??? SELECT CONVERT(latin1field USING utf8) FROM latin1table;

CONVERT(... USING ...)根據(jù)標準SQL規(guī)范實施。

在傳統(tǒng)SQL模式中,如果你轉(zhuǎn)換一個“0”日期字符串到日期類型,CONVERT()函數(shù)返回NULL。在MySQL5.1中還產(chǎn)生一條警告。

10.4.3.?CAST()

你也可以使用CAST()函數(shù)將一個字符串轉(zhuǎn)換到一個不同的字符集。語法是:

CAST(character_string AS character_data_type CHARACTER SET charset_name)

例如:

SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8);

如果使用CAST()時沒有指定CHARACTER SET,結(jié)果字符集和校對規(guī)則通過character_set_connection collation_connection系統(tǒng)變量定義。如果用CAST()并帶有CHARACTER SET X選項,那么結(jié)果字符集和校對規(guī)則是X和其 默認的校對規(guī)則。

你可能不能在CAST()中使用COLLATE子句,但是你可以在外部使用它。也就是說,不是CAST(... COLLATE ...),而是CAST(...) COLLATE ...。

例如:

SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;

在傳統(tǒng)SQL模式中,如果你轉(zhuǎn)換一個“0”日期字符串到日期類型,CAST()函數(shù)返回NULL。在MySQL5.1中還產(chǎn)生一條警告。

10.4.4.?SHOW語句

一些SHOW語句提供額外的字符集信息。這些語句包括SHOW CHARACTER SET、SHOW COLLATION、SHOW CREATE DATABASESHOW CREATE TABLESHOW COLUMNS。

SHOW CHARACTER SET命令顯示全部可用的字符集。它帶有一個可選的LIKE子句來指示匹配哪些字符集名。例如:

mysql> SHOW CHARACTER SET LIKE 'latin%';

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

| Charset | Description???????????????? | Default collation | Maxlen |

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

| latin1? | cp1252 West European??????? | latin1_swedish_ci |????? 1 |

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

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

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

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

見13.5.4.1節(jié),“SHOW CHARACTER SET語法”。

SHOW COLLATION語句的輸出包括全部可用的字符集。它帶有一個可選的LIKE子句來指示匹配哪些 校對規(guī)則名。例如:

mysql> SHOW COLLATION LIKE 'latin1%';
+-------------------+---------+----+---------+----------+---------+
| Collation???????? | Charset | Id | Default | Compiled | Sortlen |
+-------------------+---------+----+---------+----------+---------+
| latin1_german1_ci | latin1? |? 5 |???????? |????????? |?????? 0 |
| latin1_swedish_ci | latin1? |? 8 | Yes???? | Yes????? |?????? 0 |
| latin1_danish_ci? | latin1? | 15 |???????? |????? ????|?????? 0 |
| latin1_german2_ci | latin1? | 31 |???????? | Yes????? |?????? 2 |
| latin1_bin??????? | latin1? | 47 |???????? | Yes????? |?????? 0 |
| latin1_general_ci | latin1? | 48 |???????? |????????? |?????? 0 |
| latin1_general_cs | latin1? | 49 |???????? |????????? |?????? 0 |
| latin1_spanish_ci | latin1? | 94 |???????? |????????? |?????? 0 |
+-------------------+---------+----+---------+----------+---------+

見13.5.4.2節(jié),“SHOW COLLATION語法”。

SHOW CREATE DATABASE語句顯示創(chuàng)建給定數(shù)據(jù)庫的CREATE DATABASE語句。結(jié)果包括全部數(shù)據(jù)庫選項。支持DEFAULT CHARACTER SETCOLLATE。全部數(shù)據(jù)庫選項存儲在命名為db.Opt的文本文件中,該文件能夠在數(shù)據(jù)庫目錄中找到。

mysql> SHOW CREATE DATABASE test;
+----------+-----------------------------------------------------------------+
| Database | Create Database???????????????????????????????????????????????? |
+----------+-----------------------------------------------------------------+
| test???? | CREATE DATABASE `test`  |
+----------+-----------------------------------------------------------------+

見13.5.4.4節(jié),“SHOW CREATE DATABASE語法”

SHOW CREATE TABLESHOW CREATE DATABASE相似,但是顯示創(chuàng)建給定數(shù)據(jù)庫的CREATE TABLE語句。列定義顯示任何字符集規(guī)格,并且表選項包括字符集信息。

見13.5.4.5節(jié),“SHOW CREATE TABLE語法”

當以SHOW FULL COLUMNS調(diào)用時,SHOW COLUMNS語句顯示表中列的校對規(guī)則。具有CHAR、VARCHARTEXT數(shù)據(jù)類型的列有非NULL的 校對規(guī)則。數(shù)值列和其它非字符類型的列有NULL校對規(guī)則。例如:

mysql> SHOW FULL COLUMNS FROM person\G

*************************** 1. row ***************************

???? Field: id

????? Type: smallint(5) unsigned

?Collation: NULL

????? Null: NO

?????? Key: PRI

?? Default: NULL

???? Extra: auto_increment

Privileges: select,insert,update,references

?? Comment:

*************************** 2. row ***************************

???? Field: name

????? Type: char(60)

?Collation: latin1_swedish_ci

????? Null: NO

?????? Key:

?? Default:

???? Extra:

Privileges: select,insert,update,references

?? Comment:

字符集不是顯示的部分。(字符集名隱含在校對規(guī)則名中。)

見13.5.4.3節(jié),“SHOW COLUMNS語法”。

10.5.?Unicode支持

MySQL 5.1支持兩種字符集以保存Unicode數(shù)據(jù):

·???????? ucs2,UCS-2 Unicode字符集。

·???????? utf8Unicode字符集的UTF8編碼。

UCS-2(二進制Unicode表示法)中,每一個字符用一個雙字節(jié)的Unicode編碼來表示的,第一個字節(jié)表示重要的意義。例如:"LATIN CAPITAL LETTER A"Unicode編碼是0x0041,它按順序存儲為兩個字節(jié):0x00 0x41"CYRILLIC SMALL LETTER YERU"Unicode 0x044B)順序存儲為兩個字節(jié):0x04 0x4B。對于Unicode字符和它們的編碼,請參見Unicode 主頁 。

當前,UCS-2還不能夠用作為客戶端字符集,這意味著SET NAMES 'ucs2'不起作用。

UTF8字符集(轉(zhuǎn)換Unicode表示)是存儲Unicode數(shù)據(jù)的一種可選方法。它根據(jù) RFC 3629執(zhí)行。UTF8字符集的思想是不同Unicode字符采用變長字節(jié)序列編碼:

·???????? 基本拉丁字母、數(shù)字和標點符號使用一個字節(jié)。

·???????? 大多數(shù)的歐洲和中東手寫字母適合兩個字節(jié)序列:擴展的拉丁字母(包括發(fā)音符號、長音符號、重音符號、低音符號和其它音符)、西里爾字母、希臘語、亞美尼亞語、希伯來語、阿拉伯語、敘利亞語和其它語言。

·???????? 韓語、中文和日本象形文字使用三個字節(jié)序列。

RFC 3629說明了采用一到四個字節(jié)的編碼序列。當前,MySQLUTF8不支持四個字節(jié)。(UTF8編碼的舊標準是由RFC 2279給出,它描述了從一到六個字節(jié)的UTF8編碼序列。RFC 3629補充了作廢的RFC 2279;因此,不再使用5個字節(jié)和6個字節(jié)的編碼序列。)

提示:使用UTF8時為了節(jié)省空間,使用VARCHAR而不要用CHAR。否則,MySQL必須為一個CHAR(10) CHARACTER SET utf8列預(yù)備30個字節(jié),因為這是可能的最大長度。

10.6.?用于元數(shù)據(jù)的UTF8

元數(shù)據(jù)是“關(guān)于數(shù)據(jù)的數(shù)據(jù)”。描述數(shù)據(jù)庫的任何數(shù)據(jù)—作為數(shù)據(jù)庫內(nèi)容的對立面—是元數(shù)據(jù)。因此,列名、數(shù)據(jù)庫名、用戶名、版本名以及從SHOW語句得到的結(jié)果中的大部分字符串是元數(shù)據(jù)。還包括INFORMATION_SCHEMA數(shù)據(jù)庫中的表中的內(nèi)容,因為定義的那些表存儲關(guān)于數(shù)據(jù)庫對象的信息。

元數(shù)據(jù)表述必須滿足這些需求:

·???????? 全部元數(shù)據(jù)必須在同一字符集內(nèi)。否則,對INFORM一個TION_SCHEMA數(shù)據(jù)庫中的表執(zhí)行的SHOW命令和SELECT查詢不能正常工作,因為這些運算結(jié)果中的同一列的不同行將會使用不同的字符集。

·???????? 元數(shù)據(jù)必須包括所有語言的所有字符。否則,用戶將不能夠使用它們自己的語言來命名列和表。

為了滿足這兩個需求,MySQL使用Unicode字符集存儲元數(shù)據(jù),即UTF8。如果你從不使用重音字符,這不會導(dǎo)致任何破壞。但如果你使用重音字符,應(yīng)該注意的是元數(shù)據(jù)是用UTF8存儲。

這意味著,USER()CURRENT_USER()DATABASE()VERSION()函數(shù)的返回值被 默認設(shè)置為UTF8字符集,這與同義函數(shù)如SESSION_USER() SYSTEM_USER()的結(jié)果相同。

服務(wù)器將character_set_system系統(tǒng)變量設(shè)置為元數(shù)據(jù)字符集的名:

mysql> SHOW VARIABLES LIKE 'character_set_system';
+----------------------+-------+
| Variable_name??????? | Value |
+----------------------+-------+
| character_set_system | utf8? |
+----------------------+-------+

存儲元數(shù)據(jù)使用Unicode并不意味著列頭和DESCRIBE函數(shù)的結(jié)果默認在character_set_system字符集中。當你使用SELECT column1 FROM t語句時,名字為column1的列從服務(wù)器返回客戶端并使用由SET NAMES語句確定的字符集。更明確地說,使用的字符集是由character_set_results系統(tǒng)變量的值確定的。如果這個系統(tǒng)變量設(shè)置為NULL,不執(zhí)行字符轉(zhuǎn)換,服務(wù)器使用最初的字符集(字符集由character_set_system系統(tǒng)變量設(shè)置)返回元數(shù)據(jù)。

如果你希望服務(wù)器不使用UTF8字符集返回元數(shù)據(jù)結(jié)果,那么使用SET NAMES語句強制服務(wù)器執(zhí)行字符集轉(zhuǎn)換(見10.3.6節(jié),“連接字符集和校對”),或者在客戶端執(zhí)行轉(zhuǎn)換。在客戶端執(zhí)行轉(zhuǎn)換效率較高,但這種選項并不能使用于全部客戶端。

如果你正在一個語句中使用(例如)USER()函數(shù)進行比較或賦值,不要擔心。MySQL為你執(zhí)行一些原子轉(zhuǎn)換。

SELECT * FROM Table1 WHERE USER() = latin1_column;

這是可以的,因為在比較之前latin1_column列的內(nèi)容會自動轉(zhuǎn)換到UTF8。

INSERT INTO Table1 (latin1_column) SELECT USER();

這是可以的,因為賦值之前USER()函數(shù)返回的內(nèi)容自動轉(zhuǎn)換為latin1。至今,自動轉(zhuǎn)換沒有全部實施,但是以后的版本中應(yīng)該工作正常。

盡管自動轉(zhuǎn)換不屬于SQL標準,SQL標準化文檔中說每一個字符集是(根據(jù)支持的字符)Unicode的“子集”。因此,一個知名的原則是,“適用超集的字符集能夠應(yīng)用于其子集”,我們相信Unicode的 校對規(guī)則能夠應(yīng)用于非Unicode字符串的比較。

注釋:在MySQL5.1中,errmsg.txt文件全部使用UTF8??蛻舳俗址霓D(zhuǎn)換是自動進行的,如同元數(shù)據(jù)。

10.7.?與其它DBMS的兼容性

對于MaxDB兼容性,下面兩個語句是相同的:

CREATE TABLE t1 (f1 CHAR(n) UNICODE);
CREATE TABLE t1 (f1 CHAR(n) CHARACTER SET ucs2);

10.8.?新字符集配置文件格式

字符集配置存儲在XML文件中,一個字符集對應(yīng)一個文件。

10.9.?國家特有字符集

ANSI SQL定義了NCHAR或者NATIONAL CHAR作為一個方法來指示CHAR類型的列應(yīng)該使用某些預(yù)定義的字符集。MySQL5.1使用utf8作為預(yù)定義的字符集。例如,這些列類型聲明是等價的:
CHAR(10) CHARACTER SET utf8
NATIONAL CHARACTER(10)
NCHAR(10)

下面同樣:

VARCHAR(10) CHARACTER SET utf8
NATIONAL VARCHAR(10)
NCHAR VARCHAR(10)
NATIONAL CHARACTER VARYING(10)
NATIONAL CHAR VARYING(10)

你能夠使用N'literal'來創(chuàng)建一個使用國家特有字符集的字符串。這兩個語句是等價的:

SELECT N'some text';
SELECT _utf8'some text';

關(guān)于MySQL4.1以前的版本到5.1版本字符集升級的信息,請參見MySQL4.1參考手冊。

10.10.?MySQL支持的字符集和校對

10.10.1. Unicode字符集
10.10.2. 西歐字符集
10.10.3. 中歐字符集
10.10.4. 南歐與中東字符集
10.10.5. 波羅的海字符集
10.10.6. 西里爾字符集
10.10.7. 亞洲字符集

MySQL支持30多種字符集的70多種 校對規(guī)則。字符集和它們的默認校對規(guī)則可以通過SHOW CHARACTER SET語句顯示:

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

10.10.1.?Unicode字符集

MySQL有兩種Unicode字符集。你能夠使用這些字符集保存大約650種語言的文本。

·???????? ucs2 (UCS-2 Unicode)校對規(guī)則:

  • mysql> SHOW COLLATION LIKE 'ucs2%';
    +--------------------+---------+-----+---------+----------+---------+
    | Collation          | Charset | Id  | Default | Compiled | Sortlen |
    +--------------------+---------+-----+---------+----------+---------+
    | ucs2_general_ci    | ucs2    |  35 | Yes     | Yes      |       1 |
    | ucs2_bin           | ucs2    |  90 |         | Yes      |       1 |
    | ucs2_unicode_ci    | ucs2    | 128 |         | Yes      |       8 |
    | ucs2_icelandic_ci  | ucs2    | 129 |         | Yes      |       8 |
    | ucs2_latvian_ci    | ucs2    | 130 |         | Yes      |       8 |
    | ucs2_romanian_ci   | ucs2    | 131 |         | Yes      |       8 |
    | ucs2_slovenian_ci  | ucs2    | 132 |         | Yes      |       8 |
    | ucs2_polish_ci     | ucs2    | 133 |         | Yes      |       8 |
    | ucs2_estonian_ci   | ucs2    | 134 |         | Yes      |       8 |
    | ucs2_spanish_ci    | ucs2    | 135 |         | Yes      |       8 |
    | ucs2_swedish_ci    | ucs2    | 136 |         | Yes      |       8 |
    | ucs2_turkish_ci    | ucs2    | 137 |         | Yes      |       8 |
    | ucs2_czech_ci      | ucs2    | 138 |         | Yes      |       8 |
    | ucs2_danish_ci     | ucs2    | 139 |         | Yes      |       8 |
    | ucs2_lithuanian_ci | ucs2    | 140 |         | Yes      |       8 |
    | ucs2_slovak_ci     | ucs2    | 141 |         | Yes      |       8 |
    | ucs2_spanish2_ci   | ucs2    | 142 |         | Yes      |       8 |
    | ucs2_roman_ci      | ucs2    | 143 |         | Yes      |       8 |
    | ucs2_persian_ci    | ucs2    | 144 |         | Yes      |       8 |
    | ucs2_esperanto_ci  | ucs2    | 145 |         | Yes      |       8 |
    +--------------------+---------+-----+---------+----------+---------+
    
  • utf8 (UTF-8 Unicode)校對規(guī)則:

    mysql> SHOW COLLATION LIKE 'utf8%';
    +--------------------+---------+-----+---------+----------+---------+
    | Collation          | Charset | Id  | Default | Compiled | Sortlen |
    +--------------------+---------+-----+---------+----------+---------+
    | utf8_general_ci    | utf8    |  33 | Yes     | Yes      |       1 |
    | utf8_bin           | utf8    |  83 |         | Yes      |       1 |
    | utf8_unicode_ci    | utf8    | 192 |         | Yes      |       8 |
    | utf8_icelandic_ci  | utf8    | 193 |         | Yes      |       8 |
    | utf8_latvian_ci    | utf8    | 194 |         | Yes      |       8 |
    | utf8_romanian_ci   | utf8    | 195 |         | Yes      |       8 |
    | utf8_slovenian_ci  | utf8    | 196 |         | Yes      |       8 |
    | utf8_polish_ci     | utf8    | 197 |         | Yes      |       8 |
    | utf8_estonian_ci   | utf8    | 198 |         | Yes      |       8 |
    | utf8_spanish_ci    | utf8    | 199 |         | Yes      |       8 |
    | utf8_swedish_ci    | utf8    | 200 |         | Yes      |       8 |
    | utf8_turkish_ci    | utf8    | 201 |         | Yes      |       8 |
    | utf8_czech_ci      | utf8    | 202 |         | Yes      |       8 |
    | utf8_danish_ci     | utf8    | 203 |         | Yes      |       8 |
    | utf8_lithuanian_ci | utf8    | 204 |         | Yes      |       8 |
    | utf8_slovak_ci     | utf8    | 205 |         | Yes      |       8 |
    | utf8_spanish2_ci   | utf8    | 206 |         | Yes      |       8 |
    | utf8_roman_ci      | utf8    | 207 |         | Yes      |       8 |
    | utf8_persian_ci    | utf8    | 208 |         | Yes      |       8 |
    | utf8_esperanto_ci  | utf8    | 209 |         | Yes      |       8 |
    +--------------------+---------+-----+---------+----------+---------+
    

utf8_unicode_ci校對規(guī)則是根據(jù)Unicode校對規(guī)則算法(UCA)執(zhí)行的, 校對規(guī)則描述見 http://www.unicode.org/reports/tr10/。此校對規(guī)則使用UCA 4.0.0版本砝碼鍵:http://www.unicode.org/Public/UC一個/4.0.0/一個llkeys-4.0.0.txt。(以下討論使用utf8_unicode_ci,但同樣適合ucs2_unicode_ci。)

當前,utf8_unicode_ci校對規(guī)則僅部分支持Unicode校對規(guī)則算法。一些字符還是不能支持。并且,不能完全支持組合的記號。這主要影響越南和俄羅斯的一些少數(shù)民族語言,如:Udmurt 、TatarBashkirMari。

utf8_unicode_ci的最主要的特色是支持擴展,即當把一個字母看作與其它字母組合相等時。例如,在德語和一些其它語言中‘?’等于‘ss’。

utf8_general_ci是一個遺留的 校對規(guī)則,不支持擴展。它僅能夠在字符之間進行逐個比較。這意味著utf8_general_ci校對規(guī)則進行的比較速度很快,但是與使用utf8_unicode_ci的 校對規(guī)則相比,比較正確性較差)。

例如,使用utf8_general_ciutf8_unicode_ci兩種 校對規(guī)則下面的比較相等:

? = A
? = O
ü = U

兩種校對規(guī)則之間的區(qū)別是,對于utf8_general_ci下面的等式成立:

? = s

但是,對于utf8_unicode_ci下面等式成立:

? = ss

對于一種語言僅當使用utf8_unicode_ci排序做的不好時,才執(zhí)行與具體語言相關(guān)的utf8字符集 校對規(guī)則。例如,對于德語和法語,utf8_unicode_ci工作的很好,因此不再需要為這兩種語言創(chuàng)建特殊的utf8校對規(guī)則。

utf8_general_ci也適用與德語和法語,除了‘?’等于‘s’,而不是‘ss’之外。如果你的應(yīng)用能夠接受這些,那么應(yīng)該使用utf8_general_ci因為它速度快。否則,使用utf8_unicode_ci,因為它比較準確。

utf8_swedish_ci,與其它語言相關(guān)的utf8的校對規(guī)則相似,來源于utf8_unicode_ci,使用額外的語言規(guī)則。例如,在瑞典語中,以下的關(guān)系式成立,它在德語和法語中不成立:

ü = Y < ?

utf8_spanish_ciutf8_spanish2_ci校對規(guī)則分別適用于現(xiàn)代和古典西班牙語。在兩種 校對規(guī)則中,?’(n-發(fā)音符)是‘n’和‘o’之間的間隔字母。另外,對于古典西班牙語,‘ch’是‘c’和d之間的間隔字母,并且‘ll’是‘l’和‘m’之間的間隔字母。

10.10.2.?西歐字符集

西歐字符集覆蓋大多數(shù)西歐語言,如法語、西班牙語、加泰羅尼亞語、巴斯克人語、葡萄牙語、意大利語、阿而巴尼亞語、荷蘭語、德語、丹麥語、瑞典語、挪威語、芬蘭語、法羅人語、冰島語、愛爾蘭語、蘇格蘭語和英語。

·???????? asciiUS ASCII)校對規(guī)則:

o??????? ascii_bin

o??????? ascii_general_ci( 默認)

·???????? cp850DOS西歐) 校對規(guī)則:

o??????? cp850_bin

o??????? cp850_general_ci( 默認)

·???????? dec8DEC 西歐)校對規(guī)則:

o??????? dec8_bin

o??????? dec8_swedish_ci( 默認)

·???????? hp8HP 西歐)校對規(guī)則:

o??????? hp8_bin

o??????? hp8_english_ci( 默認)

·???????? latin1cp1252 西歐)校對規(guī)則:

o??????? latin1_bin

o??????? latin1_danish_ci

o??????? latin1_general_ci

o??????? latin1_general_cs

o??????? latin1_german1_ci

o??????? latin1_german2_ci

o??????? latin1_spanish_ci

o??????? latin1_swedish_ci( 默認)

latin1是 默認字符集。latin1_swedish_ci是 默認的校對規(guī)則,它用于大多數(shù)MySQL客戶。雖然經(jīng)常說它以瑞典/芬蘭 校對規(guī)則為基礎(chǔ),但瑞典和芬蘭人不同意這種說法。

latin1_german1_cilatin1_german2_ci校對規(guī)則基于DIN-1DIN-2標準,這里DIN代表Deutsches Institut für Normung(德語等價于ANSI)。DIN-1被叫做“字典校對規(guī)則”,DIN-2被叫做“電話簿校對規(guī)則”。

o??????? latin1_german1_ci(字典)規(guī)則:

o???????????????????? ? = a
o???????????????????? ? = O
o???????????????????? ü = U
o???????????????????? ? = s

o??????? latin1_german2_ci電話簿)規(guī)則:

o???????????????????? ? = aE
o???????????????????? ? = OE
o???????????????????? ü = UE
o???????????????????? ? = ss

latin1_spanish_ci校對規(guī)則中,‘?’(n-tilde)是‘n’和‘o’之間的間隔字母。

·???????? macromaMac西歐) 校對規(guī)則:

o??????? macroman_bin

o??????? macroman_general_ci( 默認)

·???????? swe77位瑞典語) 校對規(guī)則:

o??????? swe7_bin

o??????? swe7_swedish_ci( 默認)

10.10.3.?中歐字符集

我們還提供一些用于捷克共和國、斯洛伐克、匈牙利、羅馬尼亞、斯羅紋尼亞、克羅地亞和波蘭的字符集支持。

·???????? cp1250Windows中歐) 校對規(guī)則:

o??????? cp1250_bin

o??????? cp1250_croatian_ci

o??????? cp1250_czech_cs

o??????? cp1250_general_ci( 默認)

·???????? cp852DOS 中歐)校對規(guī)則:

o??????? cp852_bin

o??????? cp852_general_ci( 默認)

·???????? keybcs2DOS Kamenicky Czech-Slovak)校對規(guī)則:

o??????? keybcs2_bin

o??????? keybcs2_general_ci( 默認)

·???????? latin2ISO 8859-2 中歐)校對規(guī)則:

o??????? latin2_bin

o??????? latin2_croatian_ci

o??????? latin2_czech_cs

o??????? latin2_general_ci( 默認)

o??????? latin2_hungarian_ci

·???????? macceMac 中歐)校對規(guī)則:

o??????? macce_bin

o??????? macce_general_ci( 默認)

10.10.4.?南歐與中東字符集

MySQL支持的南歐和中東字符集包括亞美尼亞語、阿拉伯語、喬治亞語、希臘語、希伯萊語和土耳其語:

·???????? armscii8ARMSCII-8 亞美尼亞語)校對規(guī)則:

o??????? armscii8_bin

o??????? armscii8_general_ci( 默認)

·???????? cp1256(阿拉伯語Windows) 校對規(guī)則:

o??????? cp1256_bin

o??????? cp1256_general_ci( 默認)

·???????? geostd8GEOSTD8喬治亞語) 校對規(guī)則:

o??????? geostd8_bin

o??????? geostd8_general_ci( 默認)

·???????? greekISO 8859-7希臘語)校對規(guī)則:

o??????? greek_bin

o??????? greek_general_ci( 默認)

·???????? hebrewISO 8859-8希伯萊語)校對規(guī)則:

o??????? hebrew_bin

o??????? hebrew_general_ci( 默認)

·???????? latin5ISO 8859-9 土耳其語)校對規(guī)則:

o??????? latin5_bin

o??????? latin5_turkish_ci( 默認)

10.10.5.?波羅的海字符集

波羅的海字符集覆蓋愛沙尼亞語、拉脫維亞語和立陶宛語言。當前支持的兩種波羅的海字符集:

·???????? cp1257Windows波羅的海) 校對規(guī)則:

o??????? cp1257_bin

o??????? cp1257_general_ci( 默認)

o??????? cp1257_lithuanian_ci

·???????? latin7ISO 8859-13波羅的海)校對規(guī)則:

o??????? latin7_bin

o??????? latin7_estonian_cs

o??????? latin7_general_ci( 默認)

o??????? latin7_general_cs

10.10.6.?西里爾字符集

使用西里爾字符集和校對規(guī)則的有Belarusian、保加利亞、俄語和烏克蘭語言。

·???????? cp1251Windows 西里爾)校對規(guī)則:

o??????? cp1251_bin

o??????? cp1251_bulgarian_ci

o??????? cp1251_general_ci( 默認)

o??????? cp1251_general_cs

o??????? cp1251_ukrainian_ci

·???????? cp866DOS 俄語)校對規(guī)則:

o??????? cp866_bin

o??????? cp866_general_ci( 默認)

·???????? koi8rKOI8-R Relcom 俄語)校對規(guī)則:

o??????? koi8r_bin

o??????? koi8r_general_ci( 默認)

·???????? koi8uKOI8-U 烏克蘭語)校對規(guī)則:

o??????? koi8u_bin

o??????? koi8u_general_ci( 默認)

10.10.7.?亞洲字符集

10.10.7.1. cp932字符集

我們支持的亞洲字符集包括中文、日語、韓語和泰國語。這些可能比較復(fù)雜。例如,中文字符集必須考慮到上千種不同的字符。

·???????? big5Big5傳統(tǒng)中文) 校對規(guī)則:

o??????? big5_bin

o??????? big5_chinese_ci( 默認)

·???????? cp932SJIS Windows日語)校對規(guī)則:

o??????? cp932_bin

o??????? cp932_japanese_ci( 默認)

·???????? eucjpmsUJIS Windows日語)校對規(guī)則:

o??????? eucjpms_bin

o??????? eucjpms_japanese_ci( 默認)

·???????? euckrEUC-KR 韓語)校對規(guī)則:

o??????? euckr_bin

o??????? euckr_korean_ci( 默認)

·???????? gb2312GB2312 簡體中文)校對規(guī)則:

o??????? gb2312_bin

o??????? gb2312_chinese_ci( 默認)

·???????? gbkGBK簡體中文) 校對規(guī)則:

o??????? gbk_bin

o??????? gbk_chinese_ci( 默認)

·???????? sjisShift-JIS 日語)校對規(guī)則:

o??????? sjis_bin

o??????? sjis_japanese_ci( 默認)

·???????? tis620TIS620 泰國語)校對規(guī)則:

o??????? tis620_bin

o??????? tis620_thai_ci( 默認)

·???????? ujisEUC-JP 日語)校對規(guī)則:

o??????? ujis_bin

o??????? ujis_japanese_ci( 默認)

10.10.7.1.?cp932字符集

為什么需要cp932?

MySQL中,sjis字符集對應(yīng)于由IANA定義的Shift_JIS字符集,它支持JIS X0201JIS X0208字符。(見 http://www.iana.org/assignments/character-sets 。)

但是,“SHIFT JIS”作為描述性術(shù)語的含義變得非常含糊不清,并且它常常包括由不同供應(yīng)商定義的Shift_JIS擴展部分。

例如,使用在日本Windows環(huán)境中使用的“SHIFT JIS”是MicrosoftShift_JISMicrosoft擴展,它的準確名字是Microsoft Windows Codepage: 932cp932除由Shift_JIS支持的字符之外,cp932支持擴展字符,如NEC選擇的IBM擴展字符和IBM擴展字符。

許多日本用戶在使用這些擴展字符過程中碰到過一些問題。這些問題是由于以下情況引起的:

·???????? MySQL自動轉(zhuǎn)換字符集。

·???????? 字符集通過Unicode轉(zhuǎn)換(ucs2)。

·???????? sjis字符集不支持這些擴展字符轉(zhuǎn)換。

·???????? 從號稱“SHIFT JIS”到Unicode的轉(zhuǎn)換,存在一些轉(zhuǎn)換規(guī)則,并且一些字符轉(zhuǎn)換到Unicode依賴不同的轉(zhuǎn)換規(guī)則。MySQL僅支持這些轉(zhuǎn)換規(guī)則中的一種(在后面描述)。

MySQLcp932字符集可以解決這些轉(zhuǎn)換問題。

因為MySQL支持字符集轉(zhuǎn)換,將IANA Shift_JIS cp932分離為兩種不同字符集是重要的,因為它們提供不同的轉(zhuǎn)換規(guī)則。

cp932sjis有什么不同?

cp932字符集與sjis存在以下不同點:

·???????? cp932支持NEC特殊字符、NEC選擇的IBM擴展字符和IBM選擇的字符。

·???????? 一些cp932字符有兩個不同的編碼點,這兩種編碼點轉(zhuǎn)換為相同Unicode編碼點。因此,當從Unicode轉(zhuǎn)換回到cp932時,必須選擇一個編碼點。對于這種“相互轉(zhuǎn)換,使用由Microsoft推薦的轉(zhuǎn)換規(guī)則。(見 http//support.microsoft.com/kb/170559/EN-US/。)

轉(zhuǎn)換規(guī)則如下:

o??????? 如果字符在JIS X 0208 NEC特殊字符中同時存在,使用JIS X 0208 的編碼點。

o??????? 如果字符在NEC特殊字符和IBM選擇的字符中同時存在,使用NEC特殊字符的編碼點。

o??????? 如果字符在IBM選擇的字符和NEC選擇的IBM擴展字符中同時存在,使用IBM擴展字符的編碼點。

關(guān)于cp932字符的Unicode 值的列表顯示信息見http://www.microsoft.com/globaldev/reference/dbcs/932.htm。對于cp932表中的帶有下面有四位數(shù)字出現(xiàn)的字符的實體,數(shù)字代表相應(yīng)的Unicodeucs2)編碼。對于表中有兩個帶下劃線的數(shù)字出現(xiàn)的實體,擇有一個以那兩個數(shù)字開頭的cp932字符值的范圍。點擊一個這種表的實體,將帶你到一個頁,該頁顯示每個以那些數(shù)字開頭的cp932字符的Unicode值。

以下連接很重要。它們與下列字符集的編碼相對應(yīng):

o??????? NEC特殊字符:

http://www.microsoft.com/globaldev/reference/dbcs/932/932_87.htm

o??????? NEC選擇的IBM擴展字符:

o???????????????????? http://www.microsoft.com/globaldev/reference/dbcs/932/932_ED.htm
o???????????????????? http://www.microsoft.com/globaldev/reference/dbcs/932/932_EE.htm

o??????? IBM選擇的字符:

o???????????????????? http://www.microsoft.com/globaldev/reference/dbcs/932/932_FA.htm
o???????????????????? http://www.microsoft.com/globaldev/reference/dbcs/932/932_FB.htm
o???????????????????? http://www.microsoft.com/globaldev/reference/dbcs/932/932_FC.htm

·???????? cp932eucjpms結(jié)合支持用戶自定義字符的轉(zhuǎn)換,并且解決sjis/ujis轉(zhuǎn)換問題。詳細信息,請參見http://www.opengroup.or.jp/jvc/cde/sjis-euc-e.html。

·???????? 對于一些字符,與ucs2之間的轉(zhuǎn)換與sjiscp932之間的轉(zhuǎn)換是不同的。下表舉例說明了這些不同。

轉(zhuǎn)換到ucs2

sjis/cp932

sjis ucs2轉(zhuǎn)換

cp932 ucs2轉(zhuǎn)換

5C

005C

005C

7E

007E

007E

815C

2015

2015

815F

005C

FF3C

8160

301C

FF5E

8161

2016

2225

817C

2212

FF0D

8191

00a2

FFE0

8192

00a3

FFE1

81Ca

00aC

FFE2

ucs2轉(zhuǎn)換:

ucs2

ucs2 sjis轉(zhuǎn)換

ucs2 cp932轉(zhuǎn)換

005C

815F

5C

007E

7E

7E

00a2

8191

3F

00a3

8192

3F

00aC

81Ca

3F

2015

815C

815C

2016

8161

3F

2212

817C

3F

2225

3F

8161

301C

8160

3F

FF0D

3F

817C

FF3C

3F

815F

FF5E

3F

8160

FFE0

3F

8191

FFE1

3F

8192

FFE2

3F

81Ca


這是MySQL參考手冊的翻譯版本,關(guān)于MySQL參考手冊,請訪問dev.mysql.com。 原始參考手冊為英文版,與英文版參考手冊相比,本翻譯版可能不是最新的。

?? ??: ?? ??: