.
Zen Cart - putting the dream of business ownership within reach of anyone!
Donate to: DrByte directly or to the Zen Cart team as a whole
Remember: Any code suggestions you see here are merely suggestions. You assume full responsibility for your use of any such suggestions, including any impact ANY alterations you make to your site may have on your PCI compliance.
Furthermore, any advice you see here about PCI matters is merely an opinion, and should not be relied upon as "official". Official PCI information should be obtained from the PCI Security Council directly or from one of their authorized Assessors.
Having my spanish pack in utf-8 seems to be causing more harm than good for new users.
I have looked for and failed to find a free text batch converter to create a 8859 version from the utf8 files. Can anyone help to do this as a one off?
I don't mind maintaining the two versions but I just don't have the time to create this.
i have read & followed the tutorial at www.srw2d.com regarding UTF-8... however, i'm having a problem. even though i go in and set the utf8_general_ci in the database, after I install all the fields/tables are set to latin1_general_ci.
any ideas?
PHP5
ZenCart 1.3.9h
I have same issue here. Also adding the my_db_charset.php files to the extra_confirgures folders in admin and the store results in blank store and admin pages, deleting the files restores the pages. The encoding of these pages is Shift JIS not the expected UTF-8.
Craig
PHP5
Zen 1.3.9h
Upgrading from Zen 1.2 (Japanese)
Shaun Ward, thank you so much for your help. I installed the Japanese Zen Cart 1.3.02-|10n-jp-6 with unsatisfactory results as it is based on an older version.
I am editing admin/index.php file as per your instructions. I do not know PHP very well and unfortunately stumble a lot. After making the changes the site gives me an error statement;
Parse error: syntax error, unexpected $end in store/zc_admin/index.php on line 189
Br Craig
Please note the Japanese Language Pack that Shaun made already has the correct admin/index.php and invoice.php files.
Sorry for the unnecessary post.
Using 1.3.9h, changing from latin1_swedish to utf8_general
In addition to defining charset as indicated here:
http://www.zen-cart.com/forum/showthread.php?t=153582
This is the most functional script I have found for converting tables and table data:
On my test database, it works almost flawlessly. However, I get a few errors. For example:PHP Code:
<?php
function MysqlError()
{
if (mysql_errno())
{
echo "<b>Mysql Error: " . mysql_error() . "</b>\n";
}
}
$username = "root";
$password = "";
$db = "database";
$host = "localhost";
$target_charset = "utf8";
$target_collate = "utf8_general_ci";
echo "<pre>";
$conn = mysql_connect($host, $username, $password);
mysql_select_db($db, $conn);
$tabs = array();
$res = mysql_query("SHOW TABLES");
MysqlError();
while (($row = mysql_fetch_row($res)) != null)
{
$tabs[] = $row[0];
}
// now, fix tables
foreach ($tabs as $tab)
{
$res = mysql_query("show index from {$tab}");
MysqlError();
$indicies = array();
while (($row = mysql_fetch_array($res)) != null)
{
if ($row[2] != "PRIMARY")
{
$indicies[] = array("name" => $row[2], "unique" => !($row[1] == "1"), "col" => $row[4]);
mysql_query("ALTER TABLE {$tab} DROP INDEX {$row[2]}");
MysqlError();
echo "Dropped index {$row[2]}. Unique: {$row[1]}\n";
}
}
$res = mysql_query("DESCRIBE {$tab}");
MysqlError();
while (($row = mysql_fetch_array($res)) != null)
{
$name = $row[0];
$type = $row[1];
$set = false;
if (preg_match("/^varchar\((\d+)\)$/i", $type, $mat))
{
$size = $mat[1];
mysql_query("ALTER TABLE {$tab} MODIFY {$name} VARBINARY({$size})");
MysqlError();
mysql_query("ALTER TABLE {$tab} MODIFY {$name} VARCHAR({$size}) CHARACTER SET {$target_charset}");
MysqlError();
$set = true;
echo "Altered field {$name} on {$tab} from type {$type}\n";
}
else if (!strcasecmp($type, "CHAR"))
{
mysql_query("ALTER TABLE {$tab} MODIFY {$name} BINARY(1)");
MysqlError();
mysql_query("ALTER TABLE {$tab} MODIFY {$name} VARCHAR(1) CHARACTER SET {$target_charset}");
MysqlError();
$set = true;
echo "Altered field {$name} on {$tab} from type {$type}\n";
}
else if (!strcasecmp($type, "TINYTEXT"))
{
mysql_query("ALTER TABLE {$tab} MODIFY {$name} TINYBLOB");
MysqlError();
mysql_query("ALTER TABLE {$tab} MODIFY {$name} TINYTEXT CHARACTER SET {$target_charset}");
MysqlError();
$set = true;
echo "Altered field {$name} on {$tab} from type {$type}\n";
}
else if (!strcasecmp($type, "MEDIUMTEXT"))
{
mysql_query("ALTER TABLE {$tab} MODIFY {$name} MEDIUMBLOB");
MysqlError();
mysql_query("ALTER TABLE {$tab} MODIFY {$name} MEDIUMTEXT CHARACTER SET {$target_charset}");
MysqlError();
$set = true;
echo "Altered field {$name} on {$tab} from type {$type}\n";
}
else if (!strcasecmp($type, "LONGTEXT"))
{
mysql_query("ALTER TABLE {$tab} MODIFY {$name} LONGBLOB");
MysqlError();
mysql_query("ALTER TABLE {$tab} MODIFY {$name} LONGTEXT CHARACTER SET {$target_charset}");
MysqlError();
$set = true;
echo "Altered field {$name} on {$tab} from type {$type}\n";
}
else if (!strcasecmp($type, "TEXT"))
{
mysql_query("ALTER TABLE {$tab} MODIFY {$name} BLOB");
MysqlError();
mysql_query("ALTER TABLE {$tab} MODIFY {$name} TEXT CHARACTER SET {$target_charset}");
MysqlError();
$set = true;
echo "Altered field {$name} on {$tab} from type {$type}\n";
}
if ($set)
mysql_query("ALTER TABLE {$tab} MODIFY {$name} COLLATE {$target_collate}");
}
// re-build indicies..
foreach ($indicies as $index)
{
if ($index["unique"])
{
mysql_query("CREATE UNIQUE INDEX {$index["name"]} ON {$tab} ({$index["col"]})");
MysqlError();
}
else
{
mysql_query("CREATE INDEX {$index["name"]} ON {$tab} ({$index["col"]})");
MysqlError();
}
echo "Created index {$index["name"]} on {$tab}. Unique: {$index["unique"]}\n";
}
// set default collate
mysql_query("ALTER TABLE {$tab} DEFAULT CHARACTER SET {$target_charset} COLLATE {$target_collate}");
}
// set database charset
mysql_query("ALTER DATABASE {$db} DEFAULT CHARACTER SET {$target_charset} COLLATE {$target_collate}");
mysql_close($conn);
echo "</pre>";
Dropped index idx_status_group_zen. Unique: 1
Mysql Error: Can't DROP 'idx_status_group_zen'; check that column/key exists
Dropped index idx_status_group_zen. Unique: 1
Dropped index idx_expires_date_zen. Unique: 1
Dropped index idx_date_scheduled_zen. Unique: 1
Altered field banners_title on banners from type varchar(64)
Altered field banners_url on banners from type varchar(255)
Altered field banners_image on banners from type varchar(64)
Altered field banners_group on banners from type varchar(15)
Altered field banners_html_text on banners from type text
Created index idx_status_group_zen on banners. Unique:
Mysql Error: Duplicate key name 'idx_status_group_zen'
Created index idx_status_group_zen on banners. Unique:Are these pre-existing errors or is there a problem with the script?Dropped index idx_key_value_zen. Unique: 1
Mysql Error: Can't DROP 'idx_key_value_zen'; check that column/key exists
Dropped index idx_key_value_zen. Unique: 1
Dropped index idx_cfg_grp_id_zen. Unique: 1
Altered field configuration_title on configuration from type text
Altered field configuration_key on configuration from type varchar(255)
Altered field configuration_value on configuration from type mediumtext
Altered field configuration_description on configuration from type text
Altered field use_function on configuration from type text
Altered field set_function on configuration from type text
Created index unq_config_key_zen on configuration. Unique: 1
Created index idx_key_value_zen on configuration. Unique:
Mysql Error: BLOB/TEXT column 'configuration_value' used in key specification without a key length
Created index idx_key_value_zen on configuration. Unique:
http://www.divinelighting.com -- Super Orders 3.0 -- Ultimate SEO -- Quantity Discounts -- SitemapXML -- Image Handler -- Shipworks
Those are script errors. As written it's not capable of handling multi-key indexes nor partial-length indexes, hence the error messages you're seeing.
What's the source of that script? Where did you get it from? It appears as though its source is:
stackoverflow.com/questions/105572/a-script-to-change-all-tables-and-fields-to-the-utf-8-bin-collation-in-mysql
but I'm just wondering if you're citing another source.
.
Zen Cart - putting the dream of business ownership within reach of anyone!
Donate to: DrByte directly or to the Zen Cart team as a whole
Remember: Any code suggestions you see here are merely suggestions. You assume full responsibility for your use of any such suggestions, including any impact ANY alterations you make to your site may have on your PCI compliance.
Furthermore, any advice you see here about PCI matters is merely an opinion, and should not be relied upon as "official". Official PCI information should be obtained from the PCI Security Council directly or from one of their authorized Assessors.
Yes Dr. Byte, that is exactly where it came from. Are you aware of a script that will handle all the indexes?
http://www.divinelighting.com -- Super Orders 3.0 -- Ultimate SEO -- Quantity Discounts -- SitemapXML -- Image Handler -- Shipworks
I agree -- that script was probably the closest I've seen to reliably handling most of the steps involved in properly preserving data while converting character sets and collation to UTF8.
I've made some alterations to overcome several of the limitations I see in it, and contributed the result here:
http://www.zen-cart.com/index.php?ma...oducts_id=1937
NOTES:
MAKE A DATABASE BACKUP FIRST!
And take your store Down For Maintenance while converting.
Watch out for any warnings - they will be shown in bold. Every error should receive appropriate attention before putting your site back online.
Feedback welcome.
.
Zen Cart - putting the dream of business ownership within reach of anyone!
Donate to: DrByte directly or to the Zen Cart team as a whole
Remember: Any code suggestions you see here are merely suggestions. You assume full responsibility for your use of any such suggestions, including any impact ANY alterations you make to your site may have on your PCI compliance.
Furthermore, any advice you see here about PCI matters is merely an opinion, and should not be relied upon as "official". Official PCI information should be obtained from the PCI Security Council directly or from one of their authorized Assessors.
Bookmarks