Cum să adaugi diacritice la mai multe nume dintr-o bază de date?

Să luăm scenariul următor:

- aveţi un tabel în baza de date care are nume de persoane scrise fără diacritice
- vreţi să adăugaţi diacritice, dar vreţi ca oamenii să poată căuta şi cu şi fără diacritice şi să obţină aceleaşi rezultate

Am încropit un script php care face tocmai asta. Pe baza a două fişiere incluse cu nume şi prenume cu diacritice, se vor adăuga diacritice la toate numele găsite în aceste fişiere.

Configurare

Deschideţi scriptul php cu un editor de texte (orice dar nu notepad), încercaţi wordpad.
Veţi vedea următoarea secţiune la începutul fişierului:


<?php
/**
 * Datele de conectare la baza de date
 */
$strHost 'localhost';
$strPort 3306;
$strUser 'narro';
$strPassword '';
$strDatabase 'narro';
/**
 * Tabelul pe care operăm schimbările
 */
$strTable 'persoane';
/**
 * E mai dificil să suportăm toate felurile posibile de scriere aşa că am ales 3:
 * 1 - numele nou va fi scris în baza de date cu majuscule
 * 2 - numele nou va fi scris în baza de date cu litere mici
 * 3 - numele nou va fi scris în baza de date cu prima literă a numelui mare şi restul mici
 * Schimbaţi de la 1 la 3 după cum doriţi
 */
$intFormat 1;
/**
 * coloanele din tabel pe care le schimbăm, puteţi adăuga câte doriţi
 */
$arrColumnNames = array(
    
'nume',
    
'prenume'
);

/**
 * fişierele în care se află numele cu diacritice (câte un nume pe o linie)
 */
$arrNameFiles = array(
    
'nume_ro.txt',
    
'prenume_ro.txt'
);

/**
 * implicit, numele care nu conţin diacritice sunt lăsate aşa cum erau
 * dacă doriţi să fie convertite şi ele la formatul ales cu $intFormat, schimbaţi linia următoare în :
 * $blnConvertAll = true;
 */
$blnConvertAll false;

Modificaţi aceste valori conform comentariilor.

Rulare

Înainte de a rula scriptul, trebuie să vă asiguraţi că aplicaţia voastră lucrează cu UTF8 la nivel de SQL. N-are rost să lungim vorba, nu este altă codare acceptabilă pentru limba română.

1. Aşadar, coloanele pe care doriţi să le convertiţi trebuie să aibă colaţia utf8_general_ci.

2. Apoi, la fiecare început de pagină, ar trebui să executaţi interogarea mysql_query('SET NAMES UTF8');

Vă recomand să adăugaţi bucata asta de cod pentru că majoritatea serverelor MySQL nu au activată implicit această opţiune.

Căutaţi locurile în care apare mysql_select_db şi adăugaţi după bucata respectivă de cod mysql_query('SET NAMES UTF8');

3. Dezarhivaţi arhiva de mai jos undeva unde se poate executa de pe server, sau oriunde dacă executaţi scriptul cu comanda php.

Dacă aţi efectuat cei trei paşi, nu trebuie decât să executaţi scriptul php în browser sau cu comanda php.
Scriptul generează şi un cod sql de restaurare a datelor la valorile iniţiale, aşa că nu vă fie frică să încercaţi.

Exemplu

Dacă în tabelul „persoane” avem următoarele date:

id     nume				prenume
1  	Calin 				Ciolos
2 	Razvan Margaritescu	Secarica

şi vom rula scriptul accesându-l din browser pur şi simplu, sau cu comanda php, vom vedea:

Conectare efectuată cu succes.
S-au actualizat 2 înregistrări.
Pentru orice eventualitate, iată scriptul sql care restaurează tabelul la forma iniţială.

UPDATE persoane SET `nume`='Calin',`prenume`='Ciolos' WHERE `nume`=UPPER('Călin') AND `prenume`=UPPER('Cioloş');
UPDATE persoane SET `nume`='Razvan Margaritescu',`prenume`='Secarica' WHERE `nume`=UPPER('Răzvan Mărgăritescu');

iar în baza de date vom vedea:

id     nume				prenume
1  	CĂLIN  				CIOLOŞ
2 	RĂZVAN MĂRGĂRITESCU	Secarica
AtaşamentMărime
fix_ro_names.zip3.47 KB

Publică un comentariu nou