Joomla!-开源天空

2008-09-08
首页 专栏热点 Joomla! 源代码分析 [翻译]Joomla! UTF-8 规范 (WIP) 二


[翻译]Joomla! UTF-8 规范 (WIP) 二

E-mail

2. 数据库 UTF-8 实现

mysql 4.1.2以上版本支持UTF-8,但是Joomla支持mysql更低的版本,当使用非utf-8数据库时候Joomla 1.5也提供安全的向后兼容。

2.1 新功能 - Joomla!设置数据库和表的字符集

当数据库默认字符集设置为utf8时候,在安装过程中,Joomla将检查数据库是否支持UTF-8,如果支持,用户可以选择合适的字典顺序,数据库将以utf-8编码和选择的字典顺序创建,表将以同样的方式创建。

UTF-8 表创建例子:

#
# Table structure for table `#__bannerclient` in a UTF-8 database
#

CREATE TABLE `#__bannerclient` (
  `cid` int(11) NOT NULL auto_increment,
  `name` varchar(60) NOT NULL default '',
  `contact` varchar(60) NOT NULL default '',
  `email` varchar(60) NOT NULL default '',
  `extrainfo` text NOT NULL,
  `checked_out` tinyint(1) NOT NULL default '0',
  `checked_out_time` time default NULL,
  `editor` varchar(50) default NULL,
  PRIMARY KEY  (`cid`)
) TYPE=MyISAM CHARACTER SET `utf8` COLLATE `utf8_general_ci`;

创建数据库和表的时候都指定字符集和字典顺寻,主要是在数据库存在并且默认字符集不是UTF-8的情况下支持utf-8字符集。

2.2 数据库向下兼容的方法

在非utf-8字符集数据库中保存utf-8编码数据的主要问题就是可能导致的数据截断。因而,‘joomla_backward.sql’用来替代‘joomla.sql’,‘joomla_backward.sql’采用默认字符集,varchar字段的长度是‘joomla.sql’中的三倍,以防止数据截断。

扩大自创存储的标准如下:

对于只保存ASCII 数据的varchar字段保持不变,对于保存utf-8或者混合的字段长度增为3倍,如果扩展后的长度超过255,那么就采用text类型,请看下面的例子:

#
# Table structure for table `#__bannerclient` in a non-UTF-8 database
#

CREATE TABLE `#__bannerclient` (
  `cid` int(11) NOT NULL auto_increment,
  `name` varchar(180) NOT NULL default '',
  `contact` varchar(180) NOT NULL default '',
  `email` varchar(60) NOT NULL default '',
  `extrainfo` text NOT NULL,
  `checked_out` tinyint(1) NOT NULL default '0',
  `checked_out_time` time default NULL,
  `editor` varchar(150) default NULL,
  PRIMARY KEY  (`cid`)
) TYPE=MyISAM;

同样的方法在组件安装的时候同样采用,详情请看第4节


2.3 Database 类 API (relevant to UTF-8)

下面的代码片段用来相关的数据库操作
获取数据库版本
安装时候设置字典顺序
数据库是否支持utf-8


 /**
  * Assumes database collation in use by sampling one text field in one core table
  * @return string Collation in use
  */
 function getCollation ()

 /**
  * @return string database version in use
  */
 function getVersion()

 /**
  * Determines if database has UTF support
         * @return boolean True if UTF-8 support exists
  */
 function hasUTF()


 

相关文章:
[翻译]Joomla! UTF-8规范 (WIP) 三

发表您的文章评论

您的姓名 (昵称)
标题:
评分: 很差一般较好很好
评论:
验证码:
请输入验证码