sql >> Databáze >  >> RDS >> Mysql

Správné zacházení s dlouhými daty v režimu spánku

Z toho, co vím, opravdu neexistuje způsob, jak by Hibernate nebo MySQL automaticky zkracovaly řetězce, aniž byste k tomu přidali logiku. Důvod, proč bych věřil, že něco takového neexistuje, je ten, že bych nikdy nechtěl, aby to, co jsem požádal o vložení do databáze, bylo jiné než to, co bylo skutečně vloženo.

Myslím, že vaše jediné možnosti jsou...

  1. Změňte definice sloupců. Udělejte z něj větší pole varchar nebo možná dokonce textové pole. Neztrácejte čas vytvářením kouzelného nástroje, když pouhá změna definice sloupce by to vyřešila několika kliknutími. Doporučuji to udělat!

  2. Viděl jsem, že používáte nějaký druh aspektu k zachycení settery a pak úpravou velikosti struny, pokud je větší než x délka. To by byl nejrychlejší důvod, proč to zpracovat ve vašem kódu. Pokud změna DB není možností a máte tisíce polí, byla by to moje další volba.

  3. Nástroj pro vytvoření řetězce třída, která může změnit velikost vašich řetězců...

    setText(String hodnota){this.text =StringUtil.truncate(val,size);}

[AKTUALIZACE] Vzhledem k tomu, že nemůžete skutečně aktualizovat databázi, doporučil bych aspekt pro zachycení nastavovačů řetězců a kontrolu jejich délky, mohlo by to vypadat takto (syntaxe může být vypnutá a toto jsem netestoval)...

private static final MAX_SIZE_OF_STRINGS = 255;

@Around("execution(* your.package.*.set*(..)) && args(java.lang.String)")
public void checkAroundSetter(final ProceedingJoinPoint pjp)
    throws Throwable {
    Object[] args = pjp.getArgs();
    for (int i = 0; i < args.length; i++) {
        if (args[i] instanceof String && ((String) args[i]).size() > MAX_SIZE_OF_STRINGS) {
            args[i] = ((String)args[i]).subString(0,MAX_SIZE_OF_STRINGS) ;
        }
    }
    pjp.proceed(args);
}

Také by došlo k určité další režii, pokud by některá vrstva musela kontrolovat definovanou velikost sloupce se všemi daty přicházejícími do tabulky na každé vložce.



  1. Rozdíl mezi omezeními Inline a Out-of-Line

  2. Je bezpečné používat LIMIT bez ORDER BY

  3. Implementace vztahu jedna ku nule nebo jedné na SQL Server

  4. 7 dobrých technických návyků, které by měli všichni zaměstnavatelé přijmout