Jump to content
php.lv forumi

Meklēšana pēc lielajiem/mazajiem latviešu burtiem


Recommended Posts

Posted

Man ir DB, kur dati glabājas utf8_general_ci kodingā.

 

Problēma tāda, ka veicot meklēšanu šajā DB, neatrod, ja meklē pēc lielajiem, burtiem, ja tas ir latviešu burts ar garumzīmi vai mikstinājuma zīmi (Ā, Ē

Š, Ķ)

 

Piemēram, ja DB ir vārds Čiekurs un meklē čiekurs, tad neatrod!

Ja ir Lapsa un meklē lapsa, tad atrod.

 

Kā šo novērst?

Posted (edited)

utf8_latvian_ci

 

no! tas ir vēlams, bet nebija svarīgi

 

1) php failu, kurā tev ir tas SELECT, saglabā kā UTF-8 bez BOM (sameklē savā koda redaktorā pie "save as", kur var norādīt faila kodējumu)

 

2) uzreiz, kad izveido savienojumu un izvēlies db, izsauc

mysql_query('SET NAMES utf8');

tikai pēc tam izpildi SELECT, un ja tajā tabulā patiešām būs utf8 dati, tad arī lielie/mazie lv burti selektēsies pareizi

 

kr4 simple example

function dbconn($sSrv, $sDb, $sUsr, $sPw) {  // inicializē mysql connection
@mysql_connect($sSrv, $sUsr, $sPw) or exit('<b>mysql_connect() error ' . mysql_errno() . ':</b> ' . mysql_error());
mysql_select_db($sDb) or exit('<b>mysql_select_db() error ' . mysql_errno() . ':</b> ' . mysql_error());
go('SET NAMES utf8');
}
function go($sSql) {  // izpilda mysql query
$h = mysql_query($sSql) or exit('<b>mysql_query() error ' . mysql_errno() . ':</b> ' . mysql_error() . '<br /><b>query:</b> ' . substr($sSql, 0, 1000));
return $h;
}
function qs($s) {return is_null($s) ? 'NULL' : "'" . mysql_real_escape_string($s) . "'";}  // query str - sagatavo tekstu (any string) ievietošanai mysql query

function esql($sSql) {  // echo sql & its returned data
echo $sSql . '<br />';
$h = go($sSql);
while ($r = mysql_fetch_row($h)) echo implode(' | ', $r) . '<br />';
echo '<br />';
}

dbconn('localhost', 'test', 'root', '123');

go('DROP TABLE IF EXISTS t');
go('CREATE TABLE t (s varchar(20)) ENGINE=MyISAM COLLATE=utf8_general_ci');
go('INSERT t (s) VALUES (' . qs('asdf') . '),(' . qs('āšņ') . '),(' . qs('Čiekurs') . ')');

esql('SELECT * FROM t WHERE s LIKE ' . qs('Ā%'));
esql('SELECT * FROM t WHERE s LIKE ' . qs('č%'));

sel_lv_1265722895.png

Edited by 2easy
Posted (edited)

vai vsp case sensitive arī ir?

izmēģināju utf8_general un utf8_general_cs, bet tie fail ;)

 

btw, nupat googlē ierakstīju "mysql like", un php.lv forums bija jau 4. rezultātā! baigi labais google reitings :)) laikam labi seo speciālisti te ir piestrādājuši ^^

Edited by 2easy
  • 3 weeks later...
Posted

neatminos īsti, bet bija kaut kas ar datubāzes kodējumu jāmaina server side.

vai arī pamēģini beigās pie kvērija. COLLATE Utf8_bin

Posted (edited)

šādi pat teorētiski nestrādātu, jo iekš utf8_latvian_ci "ci" nozīmē case-insensitive :D

kkā jāmēģina piedabūt utf8_bin

vai kaut vai COLLATE latin1_bin

Edited by 2easy
Posted (edited)

tur jau runa iet tikai par konvertēšanu...

 

protams, var jau arī pašu tabulu nodefinēt ar COLLATE=utf8_bin

Edited by 2easy

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...