Terve
Mikä olisi paras tapa määrittää tietokannan ominaisuudet, jotta aakkostaminen toimisi sivistysmaiden kielillä? Tietokanta oli aluksi utf8_unicode_ci-aakkosjärjestyksessä, mutta se ei aakkostanut sanoja oikein. Nyt näyttää siltä, että utf8_swedish_ci hoitaisi aakkostamisen oikein. Oletanko oikein?
Mikä olisi nopein tapa muuttaa jo olemassa olevan tietokannan koko aakkostamisjärjestys halutuksi? Alter table muuttaa vain taulun järjestyksen. PhpMyAdmin näyttää taulun jokaiselle tekstimuotoiselle riville taulun luomisen aikaisen tietokannan aakkosjärjestyksen, joten jokainen rivi pitäisi nimetä ja muuttaa erikseen. Alter databasekin muuttaa kyllä tietokannan järjestyksen, mutta edelleen PhpMyAdmin näyttää silloin taulujen järjestyksen pysyvän ennallaan utf8_unicode_ci:ssä. Voiko järjestyksen muuttamisen tehdä rekursiivisesti koko tietokannalle/taululle? (Muutoksen jälkeen luodut taulut aakkostuvat kyllä oikein. Miksi tuo järjestysmääre pitää lisätä jokaisen tekstikentän perään automaattisesti?)
Onneksi olen vielä testivaiheessa, joten ei tarvitse paljoa muutella mitään. Miksi ihmeessä aakkosten käyttäminen on vieläkin näin vaikeaa? Jokaiseen tietokantakyselyynkin pitää laittaa erikseen set names 'utf-8', tai joku merkki näkyy väärin joko selaimessa tai tietokannassa (PhpMyAdminin tai Sequel Pron kautta). Ehken vaan osaa, joten kaikenlaisia unicode-neuvoja ja -vinkkejä otetaan vastaan...
-Jouni
PHP & MySQL, aakkostaminen
Xcode, Mac OS X Server sekä muuta hauskaa ja hyödyllistä
9 viestiä
• Sivu 1/1
-
- Viestit: 229
- Liittynyt: 1.4.2007 klo 14.40
- Paikkakunta: Helsinki
PHP & MySQL, aakkostaminen
Viesti Kirjoittaja ZZ »
Viimeksi muokannut ZZ, 21.2.2011 klo 22.06. Yhteensä muokattu 1 kertaa.
-
- Viestit: 4927
- Liittynyt: 10.5.2005 klo 12.56
- Paikkakunta: Joensuu
Re: PHP & MySQL, aakostaminen
Viesti Kirjoittaja gramdel »
Kannattaa pistä se mysql_query("SET NAMES 'utf8'"); include fileen, jolla otat yhteyden tietokantaan sieltähän se sitten tulee automaattisesti.
/---
ap
/---
ap
Isomursu kertoo, että delfiinikaksikko oli emo ja poikanen.
http://gramdel.kapsi.fi/
http://gramdel.kapsi.fi/
-
- Viestit: 417
- Liittynyt: 22.9.2009 klo 11.44
Re: PHP & MySQL, aakostaminen
Viesti Kirjoittaja aritko »
Itse teen niin että kanta on aina UTF8_unicode_ci
Sitten jos tarvii aakkostaa jollain oudolla kielellä, kuten suomeksi, niin käytän hakulauseessa esim
Toi collate kohta kannattaa sitten tehdä sen mukaan minkä kielinen käyttäjä on. Tämä onkin sitten eri juttu miten saadaan tietää käyttäjän haluama kieli (geoIP, käyttäjän asetus ym.).
Niin ja sitten tietysti mysql_connectin jälkeen
Tässä jotain juttua aiheesta http://forums.mysql.com/read.php?103,18 ... msg-188748
Sitten jos tarvii aakkostaa jollain oudolla kielellä, kuten suomeksi, niin käytän hakulauseessa esim
Koodi: Valitse kaikki
ORDER BY field COLLATE utf8_swedish_ci ASC
Niin ja sitten tietysti mysql_connectin jälkeen
Koodi: Valitse kaikki
mysql_query ( 'SET NAMES utf8' );
Viimeksi muokannut aritko, 21.2.2011 klo 19.57. Yhteensä muokattu 3 kertaa.
-
- Viestit: 229
- Liittynyt: 1.4.2007 klo 14.40
- Paikkakunta: Helsinki
Re: PHP & MySQL, aakostaminen
Viesti Kirjoittaja ZZ »
Set names on kyllä sisällytettu funktioon. Lähinnä nipotin siitä, että tälläisiä juttuja joutuu miettimään ja kokeilemaan ennen kuin kaikki toimii oikein. Niinhän se on aina: se toimii, mikä toimii – ja sen osaa, minkä osaa. Tuollaisen laitoin dbSingle-luokkaan, jonka avulla hoidan tulostuksen sivulle:
Itse sivulla on nyt aritkon ohjeiden mukaan:
Tuo toimii, ja taitaa olla kelpo ratkaisu tähän hädättömyyteen. Kiitos neuvoista. (Onneksi käyttäjien maa-asetuksista ei tarvitse välittää. Tietokannan sisältö tarvitsee vain tulostaa suomeksi. Ja, jos tulostetaan englanniksi, ne suomalaiset nimet voidaan tulostaa suomalaisittain. Tuskin anglistit moisesta hätääntyvät.)
Onko seuraavilla eroa?
Molemmat toimii, eli onko ensimmäisestä hyötyä vain jos käyttää eri kentille eri collate-määrettä?
Tämä on nyt varmaan selvä. Kiitos vielä neuvoista.
Seuraava aihe voisi olla yhden tai useamman lomakkeen täyttäminen php-sivulla ja lomakenttien tietojen vieminen tietokannan eri tauluihin, siten että taulujen välillä säilytetään viiteavaineheys. Olisiko jossain ohjetta moiseen? Esim. viedään tauluun A jotain, tauluun B taulun A päävavain ja muuta tietoa, ja vielä mahdollisesti tauluun C edellisen taulun (B) pääavain ja jotain muuta tietoa. Olisiko jossain ohjetta tai mallia monimutkaiseen lomakesysteemin tekemiseen? Tai edes tietokantakyselyjen tekemiseen. Insert-kyselyssä osaan alikyselyllä lisätä tauluun toisen taulun kentän, mutta tämä pitäisi tehdä lennossa ketjuttaen aina kulloinkin palauttaen edellisen kyselyn tuloksesta pääavainkenttä ja lisätä se seuraavaan tauluun. Meneekö vaikeaksi? Selitinkö huonosti?
Jahas, löytyikin jonkinmoinen mysqli_insert_id-funktio. Vielä kun osaisi käyttää tuota ja ohjata sen tulos seuraavan kyselyn muuttujaksi. Pitääkö opetella käyttämään mysqli_multi_queryä? Olisiko jossain selkeitä ohjeitä tälläisiin tavikselle vaikeisiin juttuihin?
Koodi: Valitse kaikki
public function sqlQ($sql) {
mysqli_query($this->_db,"SET NAMES 'utf8'");
return mysqli_query($this->_db,$sql);
}
Koodi: Valitse kaikki
$d = dbSingle::dbLink();
$q = "SELECT nimi,linkki,sisalto FROM `y-l` ORDER BY nimi COLLATE utf8_swedish_ci";
$r = $d->sqlQ($q);
Onko seuraavilla eroa?
Koodi: Valitse kaikki
ORDER BY field1 COLLATE utf8_swedish_ci, field2 COLLATE utf8_swedish_ci
ORDER BY field1,field2 COLLATE utf8_swedish_ci
Tämä on nyt varmaan selvä. Kiitos vielä neuvoista.
Seuraava aihe voisi olla yhden tai useamman lomakkeen täyttäminen php-sivulla ja lomakenttien tietojen vieminen tietokannan eri tauluihin, siten että taulujen välillä säilytetään viiteavaineheys. Olisiko jossain ohjetta moiseen? Esim. viedään tauluun A jotain, tauluun B taulun A päävavain ja muuta tietoa, ja vielä mahdollisesti tauluun C edellisen taulun (B) pääavain ja jotain muuta tietoa. Olisiko jossain ohjetta tai mallia monimutkaiseen lomakesysteemin tekemiseen? Tai edes tietokantakyselyjen tekemiseen. Insert-kyselyssä osaan alikyselyllä lisätä tauluun toisen taulun kentän, mutta tämä pitäisi tehdä lennossa ketjuttaen aina kulloinkin palauttaen edellisen kyselyn tuloksesta pääavainkenttä ja lisätä se seuraavaan tauluun. Meneekö vaikeaksi? Selitinkö huonosti?
Jahas, löytyikin jonkinmoinen mysqli_insert_id-funktio. Vielä kun osaisi käyttää tuota ja ohjata sen tulos seuraavan kyselyn muuttujaksi. Pitääkö opetella käyttämään mysqli_multi_queryä? Olisiko jossain selkeitä ohjeitä tälläisiin tavikselle vaikeisiin juttuihin?
-
- Viestit: 417
- Liittynyt: 22.9.2009 klo 11.44
Re: PHP & MySQL, aakostaminen
Viesti Kirjoittaja aritko »
Tässä hommassa pidän yksinkertaisesta periaatteesta. Koska yleensä noita INSERT lausekkeita ei kauhean usein käytettä (ainakaan omissa jutuissa), niin pistän ihan pokkana vaan useamman INSERT lausekkeen.ZZ kirjoitti:...tietojen vieminen tietokannan eri tauluihin, siten että taulujen välillä säilytetään viiteavaineheys.
Eli eka kerään $_POST arrayhin kaiken halutun datan.
Sitten "putsaan" (sanitize) datan.
Seuraavaksi kirjoitan halutut datat kantaan.
Koodi: Valitse kaikki
// Kirjoitetaan ekaan tauluun halutut datat. id kenttä on aina auto_increment
mysql_query('INSERT INTO db1 (id,field1,field2) VALUES (NULL,"'.$_POST['field1'].'","'.$_POST['field2'].'"));
//Otetaan talteen viimeinen auto_increment arvo
$last_ID = mysql_insert_id();
//kirjoitetaan toiseen tauluun halutut datat. db1_id kenttään laitetaan relaatio
mysql_query('INSERT INTO db2 (id,db1_id,field3,field4) VALUES (NULL,'.$last_ID.',"'.$_POST['field3'].'","'.$_POST['field4'].'"));
EDIT: koodin kommenteissa kanta->taulu
Viimeksi muokannut aritko, 23.2.2011 klo 9.51. Yhteensä muokattu 3 kertaa.
-
- Viestit: 229
- Liittynyt: 1.4.2007 klo 14.40
- Paikkakunta: Helsinki
Re: PHP & MySQL, aakkostaminen
Viesti Kirjoittaja ZZ »
Taisinpa ymmärtää mallisi. Tarkoitat varmaan kannoilla db1 ja db2 ihan samassa tietokannassa sijaitsevia tauluja, niin kuin kyselylauseesi paljastaa?
Pitänee testata tuota mallia, sitten kun homma etenee siihen vaiheeseen, että saman lomakkeen dataa pitää – tai ainakin on järkevää – ohjata eri tauluihin. Olen vielä onneksi yksi taulu yksi lomake -vaiheessa. Palaan asiaan, jos ongelmia tulee. Niitä varmasti tulee, kun nuo lauseet pitää kirjoittaa yhden funktion sisään, joka kutsuu toista funktiota ja/tai luokkaa, joka taas on yhteydessä kaikkeen muuhun paitsi tietämykseeni...
Tarttis varmaan opetella virhetilanteidenkin käsittely. Ja dynaamisesti kasvava lomake, jossa voidaan lisätä uusia nimiä tauluun. Siis yhdellä lomakkeella vaihteleva määrä nimiä omiin riveihinsä. Mutta nuo on tulevien aikojen ongelmia, joihin mahdollisesti palaan.
Kiitokset edellisestä neuvosta.
Pitänee testata tuota mallia, sitten kun homma etenee siihen vaiheeseen, että saman lomakkeen dataa pitää – tai ainakin on järkevää – ohjata eri tauluihin. Olen vielä onneksi yksi taulu yksi lomake -vaiheessa. Palaan asiaan, jos ongelmia tulee. Niitä varmasti tulee, kun nuo lauseet pitää kirjoittaa yhden funktion sisään, joka kutsuu toista funktiota ja/tai luokkaa, joka taas on yhteydessä kaikkeen muuhun paitsi tietämykseeni...
Tarttis varmaan opetella virhetilanteidenkin käsittely. Ja dynaamisesti kasvava lomake, jossa voidaan lisätä uusia nimiä tauluun. Siis yhdellä lomakkeella vaihteleva määrä nimiä omiin riveihinsä. Mutta nuo on tulevien aikojen ongelmia, joihin mahdollisesti palaan.
Kiitokset edellisestä neuvosta.
-
- Viestit: 417
- Liittynyt: 22.9.2009 klo 11.44
Re: PHP & MySQL, aakkostaminen
Viesti Kirjoittaja aritko »
Jep, taulut on samassa kannassa. Tais vähän hämät noi kommentit koodissa, käytin siinä vähän väärää termiä.ZZ kirjoitti: Taisinpa ymmärtää mallisi. Tarkoitat varmaan kannoilla db1 ja db2 ihan samassa tietokannassa sijaitsevia tauluja, niin kuin kyselylauseesi paljastaa?
Eipä mitään. Kysele lisää vaan kun tulee aihetta...ZZ kirjoitti:Kiitokset edellisestä neuvosta.
-
- Viestit: 28
- Liittynyt: 30.3.2011 klo 0.15
Re: PHP & MySQL, aakkostaminen
Viesti Kirjoittaja khula »
miten myaql poistetaan macistä, jostain syystä ei pystyy oistamaan kokonaan, mitä pitäisi tehdä?
-
- Viestit: 229
- Liittynyt: 1.4.2007 klo 14.40
- Paikkakunta: Helsinki
Re: PHP & MySQL, aakkostaminen
Viesti Kirjoittaja ZZ »
Minkä yrität poistaa? MAMP:n vai MySQL:n? Tuollaiset ohjeet löysin. En ole ikinä kokeillut. Varovasti sitten vaan noiden sudottelujen kanssa... Kaikki luomasi tietokannat ainakin menetät, luonnollisesti.
http://akrabat.com/computing/uninstalli ... x-leopard/
http://akrabat.com/computing/uninstalli ... x-leopard/
9 viestiä
• Sivu 1/1
Palaa sivulle “Ohjelmointi, skriptit ja palvelimet”
Hyppää
- Yleiset aiheet
- ↳ Ajankohtaista Apple-maailmasta
- ↳ Käyttöjärjestelmät
- ↳ Ohjelmat
- ↳ Yleiskeskustelu
- Mac ja oheislaitteet
- ↳ Yleiskeskustelu laitteista
- ↳ MacBook, MacBook Pro ja MacBook Air
- ↳ iMac
- ↳ Mac mini
- ↳ Mac Pro ja Mac Studio
- ↳ Ongelmia Macin kanssa?
- iPhone, iPad ja Apple Watch
- ↳ iPhone-, iPad- ja Apple Watch -laitekeskustelu
- ↳ iPhone-, iPad- ja Apple Watch -ohjelmat sekä iOS
- ↳ Ongelmia iPhonen, iPadin tai Apple Watchin kanssa?
- Huviksi ja hyödyksi
- ↳ Off-topic
- ↳ Kuva ja graafinen suunnittelu
- ↳ Audio ja musiikki
- ↳ Video, televisio ja elokuvat
- ↳ Pelit ja pelaaminen
- ↳ Ohjelmointi, skriptit ja palvelimet
- ↳ Tietoturva ja varmuuskopiointi
- ↳ Verkot, mobiilidata ja muut puhelimet
- ↳ Retronurkka
- ↳ Foorumin ylläpito
- Kauppapaikka
- ↳ Myydään Mac
- ↳ Myydään iPhone, iPad ja iPod
- ↳ Myydään muut Applen tuotteet
- ↳ Myydään muuta tietotekniikkaa
- ↳ Ostetaan Mac
- ↳ Ostetaan iPhone, iPad ja iPod
- ↳ Ostetaan muut Applen tuotteet
- ↳ Ostetaan muuta tietotekniikkaa
- ↳ Vaihdetaan, annetaan, työtä haetaan ja tarjotaan
- ↳ Kauppapaikan keskustelu ja hintavinkit