From 3541a6797a4875191b096d6febd4b51ba4794844 Mon Sep 17 00:00:00 2001 From: garvinhicking Date: Tue, 27 Sep 2005 11:38:01 +0000 Subject: [PATCH] =?utf8?q?Support=20UTF-8=20table=20creation=20options.=20?= =?utf8?q?Thanks=20to=20Mark=20Kubacki=20and=20Kris=20K=C3=B6hntopp.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- include/db/mysql.inc.php | 19 ++++++++++++++++-- include/db/mysqli.inc.php | 14 +++++++++++++ include/db/postgres.inc.php | 4 ++-- include/db/sqlite.inc.php | 4 ++-- sql/db.sql | 40 ++++++++++++++++++------------------- 5 files changed, 55 insertions(+), 26 deletions(-) diff --git a/include/db/mysql.inc.php b/include/db/mysql.inc.php index 3144143..8430641 100644 --- a/include/db/mysql.inc.php +++ b/include/db/mysql.inc.php @@ -159,9 +159,24 @@ function serendipity_db_schema_import($query) { static $search = array('{AUTOINCREMENT}', '{PRIMARY}', '{UNSIGNED}', '{FULLTEXT}', '{FULLTEXT_MYSQL}', '{BOOLEAN}'); static $replace = array('int(11) not null auto_increment', 'primary key', - 'unsigned' , 'FULLTEXT', 'FULLTEXT', 'enum (\'true\', \'false\') NOT NULL default \'true\''); - + 'unsigned' , 'FULLTEXT', 'FULLTEXT', 'enum (\'true\', \'false\') NOT NULL default \'true\''); + static $is_utf8 = null; + global $serendipity; + + if ($is_utf8 === null) { + $search[] = '{UTF_8}'; + if ( $_POST['charset'] == 'UTF-8/' || + $serendipity['charset'] == 'UTF-8/' || + $serendipity['POST']['charset'] == 'UTF-8/' || + LANG_CHARSET == 'UTF-8' ) { + $replace[] = '/*!40100 CHARACTER SET utf8 COLLATE utf8_unicode_ci */'; + } else { + $replace[] = ''; + } + } + $query = trim(str_replace($search, $replace, $query)); + if ($query{0} == '@') { // Errors are expected to happen (like duplicate index creation) return serendipity_db_query(substr($query, 1), false, 'both', false, false, false, true); diff --git a/include/db/mysqli.inc.php b/include/db/mysqli.inc.php index e2f2441..9923621 100644 --- a/include/db/mysqli.inc.php +++ b/include/db/mysqli.inc.php @@ -156,6 +156,20 @@ function serendipity_db_schema_import($query) { '{UNSIGNED}', '{FULLTEXT}', '{FULLTEXT_MYSQL}', '{BOOLEAN}'); static $replace = array('int(11) not null auto_increment', 'primary key', 'unsigned' , 'FULLTEXT', 'FULLTEXT', 'enum (\'true\', \'false\') NOT NULL default \'true\''); + static $is_utf8 = null; + global $serendipity; + + if ($is_utf8 === null) { + $search[] = '{UTF_8}'; + if ( $_POST['charset'] == 'UTF-8/' || + $serendipity['charset'] == 'UTF-8/' || + $serendipity['POST']['charset'] == 'UTF-8/' || + LANG_CHARSET == 'UTF-8' ) { + $replace[] = '/*!40100 CHARACTER SET utf8 COLLATE utf8_unicode_ci */'; + } else { + $replace[] = ''; + } + } $query = trim(str_replace($search, $replace, $query)); if ($query{0} == '@') { diff --git a/include/db/postgres.inc.php b/include/db/postgres.inc.php index 0c758f1..b07f01d 100644 --- a/include/db/postgres.inc.php +++ b/include/db/postgres.inc.php @@ -160,9 +160,9 @@ function &serendipity_db_query($sql, $single = false, $result_type = "both", $re function serendipity_db_schema_import($query) { static $search = array('{AUTOINCREMENT}', '{PRIMARY}', '{UNSIGNED}', - '{FULLTEXT}', '{BOOLEAN}', 'int(1)', 'int(10)', 'int(11)', 'int(4)'); + '{FULLTEXT}', '{BOOLEAN}', 'int(1)', 'int(10)', 'int(11)', 'int(4)', '{UTF_8}); static $replace = array('SERIAL', 'primary key', '', '', 'BOOLEAN NOT NULL', 'int2', - 'int4', 'int4', 'int4'); + 'int4', 'int4', 'int4', ''); if (stristr($query, '{FULLTEXT_MYSQL}')) { return true; diff --git a/include/db/sqlite.inc.php b/include/db/sqlite.inc.php index fe3aa88..a24b4d3 100644 --- a/include/db/sqlite.inc.php +++ b/include/db/sqlite.inc.php @@ -210,8 +210,8 @@ function serendipity_db_probe($hash, &$errs) function serendipity_db_schema_import($query) { - static $search = array('{AUTOINCREMENT}', '{PRIMARY}', '{UNSIGNED}', '{FULLTEXT}', '{BOOLEAN}'); - static $replace = array('INTEGER', 'PRIMARY KEY', '', '', 'BOOLEAN NOT NULL'); + static $search = array('{AUTOINCREMENT}', '{PRIMARY}', '{UNSIGNED}', '{FULLTEXT}', '{BOOLEAN}', '{UTF_8}'); + static $replace = array('INTEGER', 'PRIMARY KEY', '', '', 'BOOLEAN NOT NULL', ''); if (stristr($query, '{FULLTEXT_MYSQL}')) { return true; diff --git a/sql/db.sql b/sql/db.sql index 744a1ea..18d31ce 100644 --- a/sql/db.sql +++ b/sql/db.sql @@ -21,18 +21,18 @@ create table {PREFIX}authors ( email varchar(128) not null default '', userlevel int(4) {UNSIGNED} not null default '0', right_publish int(1) default '1' -); +) {UTF_8}; create table {PREFIX}groups ( id {AUTOINCREMENT} {PRIMARY}, name varchar(64) default null -); +) {UTF_8}; create table {PREFIX}groupconfig ( id int(10) {UNSIGNED} not null default '0', property varchar(64) default null, value varchar(128) default null -); +) {UTF_8}; CREATE INDEX groupid_idx ON {PREFIX}groupconfig (id); CREATE INDEX groupprop_idx ON {PREFIX}groupconfig (id, property); @@ -40,7 +40,7 @@ CREATE INDEX groupprop_idx ON {PREFIX}groupconfig (id, property); create table {PREFIX}authorgroups ( groupid int(10) {UNSIGNED} not null default '0', authorid int(10) {UNSIGNED} not null default '0' -); +) {UTF_8}; CREATE INDEX authorgroup_idxA ON {PREFIX}authorgroups (groupid); CREATE INDEX authorgroup_idxB ON {PREFIX}authorgroups (authorid); @@ -51,7 +51,7 @@ create table {PREFIX}access ( artifact_type varchar(64) NOT NULL default '', artifact_mode varchar(64) NOT NULL default '', artifact_index varchar(64) NOT NULL default '' -); +) {UTF_8}; CREATE INDEX accessgroup_idx ON {PREFIX}access(groupid); CREATE INDEX accessgroupT_idx ON {PREFIX}access(artifact_id,artifact_type,artifact_mode); @@ -77,7 +77,7 @@ create table {PREFIX}comments ( subscribed {BOOLEAN}, status varchar(50) not null, referer varchar(200) default null -); +) {UTF_8}; CREATE INDEX commentry_idx ON {PREFIX}comments (entry_id); CREATE INDEX commpentry_idx ON {PREFIX}comments (parent_id); @@ -103,7 +103,7 @@ create table {PREFIX}entries ( allow_comments {BOOLEAN}, last_modified int(10) {UNSIGNED} default null, moderate_comments {BOOLEAN} -); +) {UTF_8}; # FULLTEXT_MYSQL is ignored on all Non-MySQL setups (SQLite, PostgreSQL) CREATE {FULLTEXT_MYSQL} INDEX entry_idx on {PREFIX}entries (title,body,extended); @@ -121,7 +121,7 @@ create table {PREFIX}references ( entry_id int(10) {UNSIGNED} not null default '0', link text, name text -); +) {UTF_8}; CREATE INDEX refentry_idx ON {PREFIX}references (entry_id); @@ -139,7 +139,7 @@ CREATE TABLE {PREFIX}exits ( path varchar(255), query varchar(255), PRIMARY KEY (host,day,entry_id) -); +) {UTF_8}; CREATE INDEX exits_idx ON {PREFIX}exits (entry_id,day); @@ -157,7 +157,7 @@ CREATE TABLE {PREFIX}referrers ( path varchar(255), query varchar(255), PRIMARY KEY (host,day,entry_id) -); +) {UTF_8}; CREATE INDEX referrers_idx ON {PREFIX}referrers (entry_id,day); @@ -169,7 +169,7 @@ create table {PREFIX}config ( name varchar(255) not null, value text not null, authorid int(11) default '0' -); +) {UTF_8}; CREATE INDEX configauthorid_idx ON {PREFIX}config (authorid); @@ -181,7 +181,7 @@ CREATE TABLE {PREFIX}suppress ( path varchar(255), query varchar(255), last timestamp NOT NULL -); +) {UTF_8}; CREATE INDEX url_idx on {PREFIX}suppress (host, ip); CREATE INDEX urllast_idx on {PREFIX}suppress (last); @@ -193,7 +193,7 @@ CREATE TABLE {PREFIX}plugins ( authorid int(11) default '0', path varchar(255) default null, PRIMARY KEY(name) -); +) {UTF_8}; CREATE INDEX pluginauthorid_idx ON {PREFIX}plugins (authorid); CREATE INDEX pluginplace_idx ON {PREFIX}plugins (placement); @@ -207,7 +207,7 @@ CREATE TABLE {PREFIX}category ( category_left int(11) default '0', category_right int(11) default '0', parentid int(11) DEFAULT '0' NOT NULL -); +) {UTF_8}; CREATE INDEX categorya_idx ON {PREFIX}category (authorid); CREATE INDEX categoryp_idx ON {PREFIX}category (parentid); @@ -226,7 +226,7 @@ CREATE TABLE {PREFIX}images ( authorid int(11) default '0', path text, hotlink int(1) -); +) {UTF_8}; CREATE INDEX imagesauthorid_idx ON {PREFIX}images (authorid); CREATE {FULLTEXT} INDEX pathkey_idx on {PREFIX}images (path); @@ -234,7 +234,7 @@ CREATE {FULLTEXT} INDEX pathkey_idx on {PREFIX}images (path); CREATE TABLE {PREFIX}entrycat ( entryid int(11) not null, categoryid int(11) not null -); +) {UTF_8}; CREATE UNIQUE INDEX entryid_idx ON {PREFIX}entrycat (entryid, categoryid); @@ -242,7 +242,7 @@ create table {PREFIX}entryproperties ( entryid int(11) not null, property varchar(255) not null, value text -); +) {UTF_8}; CREATE INDEX entrypropid_idx ON {PREFIX}entryproperties (entryid); CREATE UNIQUE INDEX prop_idx ON {PREFIX}entryproperties (entryid, property); @@ -252,7 +252,7 @@ CREATE TABLE {PREFIX}permalinks ( entry_id int(10) {UNSIGNED} not null default '0', type varchar(200) not null default '', data text -); +) {UTF_8}; CREATE INDEX pl_idx ON {PREFIX}permalinks (permalink); CREATE INDEX ple_idx ON {PREFIX}permalinks (entry_id); @@ -262,7 +262,7 @@ CREATE INDEX plcomb_idx ON {PREFIX}permalinks (permalink, type); create table {PREFIX}plugincategories ( class_name varchar(250) default null, category varchar(250) default null -); +) {UTF_8}; CREATE INDEX plugincat_idx ON {PREFIX}plugincategories(class_name, category); @@ -282,7 +282,7 @@ create table {PREFIX}pluginlist ( requirements text NOT NULL, website varchar(255) NOT NULL default '', last_modified int(11) NOT NULL default '0' -); +) {UTF_8}; CREATE INDEX pluginlist_f_idx ON {PREFIX}pluginlist(plugin_file); CREATE INDEX pluginlist_cn_idx ON {PREFIX}pluginlist(class_name); -- 2.39.5