Parte 2 de 2 – MYSQL, PHP, ISO, utf8, utf8_general_ci, utf8_unicode_ci

Artigo 1

Artigo 2

Usando PHP

Caso precise codificar e descodificar, é nesta ordem:

utf8_encode() > html_entity_decode() > htmlentities() e em último caso, se nada disso funcionar, use o header(‘content-type text/html charset=utf-8’);

Usando META TAGS

<meta charset=”utf-8″>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ >

Conexão PDO

MySQL (PDO):
$dsn = “mysql:host=localhost;dbname=world;charset=utf8”;

MySQL

MySQL:
CREATE DATABASE nome_bd CHARACTER SET UTF8;

COLLATE
In short: utf8_unicode_ci uses the Unicode Collation Algorithm as defined in the Unicode standards, whereas utf8_general_ci is a more simple sort order which results in “less accurate“[preciso] sorting results. But faster

Explicacao de unicode and general
utf8_general_ci
utf8_unicode_ci
https://pt.stackoverflow.com/questions/43281/qual-collate-utf-8-%C3%A9-o-mais-apropriada-para-web-multi-linguagem

SQL:
database
ALTER DATABASE databaseName CHARSET = UTF8 COLLATE = utf8_general_ci; //utf8_unicode_ci
table
ALTER TABLE tableName CONVERT TO CHARACTER SET utf8;
for a specific column in a table
ALTER TABLE columnName COLLATE utf8_general_ci

: esse i no final é ignora busca sensecade, minuscula e maiuscula

Entenda CHARSET e COLLATE

CHARSET e COLLATE são coisas distintas, no MySQL, cada CHARSET possui COLLATEs, cada um com sua particularidade. O intuito deste Wiki não é explicar as características de cada um deles, pois pode ser visto da documentação do MySQL, mas daremos um pequeno descritivo entre latin1_general_ci, latin1_general_cs e latin1_swedish_ci.

COLUNA texto, tamanhos

Type | Maximum length
———–+————————————-
TINYTEXT | 255 (2 8−1) bytes
TEXT | 65,535 (216−1) bytes = 64 KiB
MEDIUMTEXT | 16,777,215 (224−1) bytes = 16 MiB
LONGTEXT | 4,294,967,295 (232−1) bytes = 4 GiB

Type | A= worst case (x/3) | B = best case (x) | words estimate (A/4.5) – (B/4.5)
———–+—————————————————————————
TINYTEXT | 85 | 255 | 18 – 56
TEXT | 21845 | 65,535 | 4854.44 – 14,563.33
MEDIUMTEXT | 5,592,415 | 16,777,215 | 1,242,758.8 – 3,728,270
LONGTEXT | 1,431,655,765 | 4,294,967,295 | 318,145,725.5 – 954,437,176.6

 

Tive este mesmo problema e consegui resolver da seguinte maneira:
No meu arquivo de conexão com o banco, coloquei o código abaixo:

echo utf8_encode($exibe[‘recadao_mensagem’]);
ou
mysql_query(“SET NAMES ‘utf8′”);
mysql_query(‘SET character_set_connection=utf8’);
mysql_query(‘SET character_set_client=utf8’);
mysql_query(‘SET character_set_results=utf8’);
ou
ini_set(‘default_charset’, ‘UTF-8’);