When I save François into my DB, it becomes François.
How can I prevent it to keep François ?
During my PDO connection I already use PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8".
Thanks.
you can change charset to utf8 after starting PDO connection.
$pdo_object = new PDO(...);
$pdo_object->exec("SET NAMES 'utf8'; SET CHARSET 'utf8'");
With mysql I can just do this to solve the problem:
$diveOptions = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"); // set names utf-8 and works well
$pdo = new PDO('mysql:host=mysql.example.com;dbname=example_db',"username","password",diveOptions);
But I can't do the same with the firebird's pdo connection.
How can I solve this problem of UTF-8?
Already tried charset=utf8 in pdo configuration don t work too..
$str_conn = "firebird:dbname=C:\db\banco.gdb;charset=utf8;host=localhost";
$dbh = new PDO($str_conn, "SYSDBA", "masterkey");
In my db was set to nome like this:
DEFAULT CHARACTER SET NONE COLLATION NONE;
I am trying to add a Hebrew value to a database using php's PDO class.
After finally succeeding doing that
(by using: array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"), I found out that COLLATE HEBREW_CI_AS is added to my value.
Is there any way to prevent this addition?
thank you, and sorry for my bad English.
PHP: The Right Way is a good source of information on this.
Basically check whether your PDO-connection specifies the charset in the DSN:
new PDO(
'mysql:host=your-hostname;dbname=your-db;charset=utf8',
'your-username',
'your-password',
array(
# ... PDO Connection Options
)
);
Make sure your database tables are set to use the utf8-collation, either by phpmyadmin or using the mysql-command line utility and the following query:
ALTER TABLE table_name COLLATE utf8;
Also you might want to consider using utf8mb4 as is suggested in the book.
I have the following php code. Connection is OK but it doesn't show the Arabic text stored in the database correctly. Just question marks.
$mysqlPDO = new PDO('mysql:host='.HOSTNAME.';charset=utf8;dbname='.DBNAME.'',DBUSERNAME, DBPASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8"));
$stmt = $mysqlPDO->prepare("SHOW TABLES LIKE 'main_patches_version'");
$stmt->execute();
The DB collation is already set to utf8_general_ci and the table has utf8 as charset.
This application is calling Zend libraries which I'm not aware of.
I checked that the HTML has utf8 as encoding type. any suggestion?
I'm using xampp server, php version 5.5.11, mysql version 5.6.16
I found the solution here
http://akrabat.com/php/utf8-php-and-mysql/
I unmarked
character_set_server=utf8 from my.ini file and it works.
Thanks all
Make sure your DB collation is set to use utf8_general_ci or utf8mb4_general_ci.
This question already has answers here:
UTF-8 all the way through
(13 answers)
Closed 5 months ago.
I use the PDO library with a MySQL database in PHP, but if I insert any data encoded in UTF-8, like Arabic words, it’s inserted into the database, but as ?????????.
In my own framework, after I create the PDO connection, I send two queries – SET NAMES utf8 and SET CHARACTER SET utf8. It still doesn’t work.
Example:
loadclass('PDO', array(
sprintf(
'mysql:host=%s;port=%s;dbname=%s',
confitem('database', 'host'),
confitem('database', 'port'),
confitem('database', 'name')
),
confitem('database', 'username'),
confitem('database', 'password'),
array('PDO::ATTR_PERSISTENT' => confitem('database', 'pconnect'))
));
$this->query('SET NAMES ' . confitem('database', 'charset'));
$this->query('SET CHARACTER SET ' . confitem('database', 'charset'));
Workaround: Use the json_encode function to convert data before inserting it to the database, and use json_decode to decode it after fetching. This is how I do it now.
Warning: This answer applies to PHP 5.3.5 and lower. Do not use it for PHP version 5.3.6 (released in March 2011) or later.
Compare with Palec's answer here.
Use:
$pdo = new PDO(
'mysql:host=hostname;dbname=defaultDbName',
'username',
'password',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);
It forces UTF-8 on the PDO connection. It worked for me.
You have to set the correct character set for the connection. Add the charset=utf8 option to the DSN (this is MySQL-specific!)
$pdo = new PDO(
'mysql:host=hostname;dbname=defaultDbName;charset=utf8',
'username',
'password'
);
However, in PHP versions before 5.3.6 (released in March 2011), you must use a workaround as the charset option in the DSN is not supported.
$pdo = new PDO(
'mysql:host=hostname;dbname=defaultDbName',
'username',
'password',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);
All attempts like:
PDO::MYSQL_ATTR_INIT_COMMAND =>"SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' "
or
$this->connection = new PDO('mysql:host='.DBHOST.';dbname='.DBNAME.';charset=utf8', DBUSER, DBPASS, self::$opt);
or
$this->connection->exec("set names utf8");
still generated unreadable text mess.
In my case, the cause of the problem was: htmlentities used prior to inserting data into a database.
Cyrillic letters were destroyed completely.
Try setting the default_charset value in php.ini to UTF-8. Or you can set it using the ini_set function.
Also, if the input is coming through form submissions, make sure your web pages are set to UTF-8 using the meta tag.
When interacting with mysql or mariadb, charset 'utf8' is not correct. You need to use utf8mb4. Due to historical issues, utf8 in mysql/mariadb is an alias to utf8mb3 which can only contain a subset of utf8 (3 bytes instead of 4)
So adding 'charset=utf8mb4' to your PDO DSN connection string is the correct thing to do for recent PHP versions, NOT charset=utf8.
For example, the poop emoji in full color: 💩 cannot be stored if the column and PDO are not utf8mb4.